在ACM的巨坑里挣扎的弱鸡整理的模板
头文件,定义,等等
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <math.h>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <iomanip>#define ll long long
#define ull unsigned long long
#define Pi 3.1415927
#define maxn 100005
#define debug cout<<"*******"<<endl
using namespace std;
const int minn = 1e-9;
const int INF = 0x3f3f3f3f;
const int mod = 1e9+7;
int main(){std::ios::sync_with_stdio(false);//提高cin效率return 0;
}
cout格式化输出
#include <iomanip>//头文件
//感觉就是没有printf好用!
字符串:
//逆置字符串
reverse(s.begin(),s.end());//无返回值,原字符串被逆置。
数学
//两点间距离 (x1,y1),(x2,y2)
sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))
//球的体积公式 半径r
4*Pi*r*r*r/3
//一元二次方程求根公式
x1 = (-b + sqrt(b*b - 4*a*c))/(2a)
x2 = (-b - sqrt(b*b - 4*a*c))/(2a)
//一元二次方程配方法
ax^2 + bx + c = 0(a != 0)
(x - b/2a)^2 = -c/a + (b/2a)^2
除法取模
1.(a/b)%mod=a%(b*mod)/b%mod;
2.(a/b)%mod=a*b^(mod-2)%mod,mod为素数
日期
bool is_Leap(int n){//是否为闰年if(n % 4 == 0 && n % 100 != 0 || n % 400 == 0) return true;return false;
}
//月,闰年时二月+1
int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
//求y年m月d日到1年1月1日时的天数
int getDays(int y,int m,int d){int days = 0;for(int i = 1; i < y;i++){days += 365;if(is_Leap(i)){days += 1;}}for(int i = 1; i < m;i++){days += month[i];if(i == 2 && is_Leap(y)){days += 1;}}days += d;return days;
}
位运算
a & b //与运算
a | b //或运算
a ^ b //异或运算
c >>= 1;//等价于c /= 2
//奇偶
if(c&1) is_odd;
else is_even;
幂运算
//快速幂
int pow(int a,int b){int ans = 1;while(b!=0){if(b&1) ans *= a;a *= a;b >>= 1;}return ans;
}
//快速幂取模
int f(int a,int b,int m){int ans = 1;a = a % m;while(b){if(b&1){ans = ans * a % m;}a = a * a % m;b>>=1;}return ans;
}
//矩阵快速幂
void matMulti(int a[][N], int b[][N], int n)
{//求a*b,并将相乘结果存入a中int temp[N][N]; //先将a与b的乘积存入temp,然后再将其存入a memset(temp, 0, sizeof(temp));for(int i = 0;i < n;i++){for(int j = 0;j < n;j++)for(int k=0;k< n;k++) temp[i][j]+=a[i][k]*b[k][j]; } //该循环求a*b,并存入了temp for(int i=0;i<n;i++) //将temp中的值转存入a for(int j=0;j<n;j++) a[i][j]=temp[i][j];
}
void matPow(int a[][N], int n)
{ //求N*N矩阵a的n次幂 int ans[N][N]; //ans用来存放最终结果 memset(ans, 0, sizeof(ans)); //将矩阵ans的所有元素置为0 for(int i=0; i<n; i++) ans[i][i] = 1; //设置单位矩阵 while(n) { if(n&1) matMulti(ans, a, N); // ans = ans*a; matMulti(a, a, N); //a = a*a,n=n>>1; //n = n/2 ;} return ;
}
//矩阵快速幂结构体表示---求第n个菲波那切数
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000009
using namespace std;
struct Node{ll c[2][2];
}ans;
Node mult(Node a,Node b){Node c = {0};for(int i=0;i<2;i++){for(int j=0;j<2;j++){for(int k=0;k<2;k++){c.c[i][j] += (a.c[i][k] * b.c[k][j]) % mod;c.c[i][j] %= mod;}}}return c;
}
Node mulPow(ll n){Node res = ans;if(n<0) return res;while(n){if(n&1) res = mult(res,ans);ans = mult(ans,ans);n>>=1;}return res;
}
void init(){ans.c[0][0] = 1;ans.c[0][1] = 1;ans.c[1][0] = 1;ans.c[1][1] = 0;
}
int main(){ll n;while(cin>>n){init();Node a = mulPow(n-2);cout<<a.c[0][0]*1<<endl;}
return 0;}
扩展欧几里得
int exgcd(int a,int b,int &x,int &y)
{if(b==0){x=1;y=0;return a; //返回最大公约数}int r=exgcd(b,a%b,x,y);int t=x;//一次一更新x和yx=y;y=t-a/b*y;return r;//返回最大公约数
}
并查集
int find(int root){//紫皮书的findreturn pre[root] == root ? root : pre[root] = find(pre[root]);
}
int find(int root)//自己整理的
{ int son, tmp; son = root; while(root != pre[root]) root = pre[root]; while(son != root) { tmp = pre[son]; pre[son] = root; son = tmp; } return root;
}
void join(int root1, int root2)//连接
{ int x, y; x = find(root1);y = find(root2);if(x != y) pre[x] = y;
}
动态规划典型问题状态转移方程
//数字三角形:
f[i][j]=max(f[i−1][j],f[i−1][j−1])+a[i][j]
最小生成树—克鲁斯卡尔
struct Edge{ //结点结构体int u,v,w;Edge(){}Edge(int u,int v,int w){//构造方法this->u = u;this->v = v;this->w = w;}bool operator < (const Edge &a){//排序规则return w < a.w;}
};
char a,b;
Edge e[maxn];
int pa[90];
void init(){//并查集初始化for(int i = 0; i <= 30; i++){pa[i] = i;}
}
int findset(int x){//寻找集合代表并进行路径压缩return x == pa[x] ? x : pa[x] = findset(pa[x]);
}
int main(){std::ios::sync_with_stdio(false);int n,m,x,w;while(cin>>n && n){m = 0;int cnt = n;n--;while(n--){cin>>a>>x;int u = a - 'A' + 1;while(x--){cin>>b>>w;int v = b - 'A' + 1;e[m++] = Edge(u,v,w);//添加边,并记录边的个数。}}sort(e,e+m);int cost = 0;//花费init();for(int i = 0; i < m; i++){//贪心,每次找最小花费的边,如果是不同树中的,添加到最小生成树中Edge u = e[i];int x = u.u;int y = u.v;x = findset(x);y = findset(y);if(x != y){cost += u.w;pa[x] = y;cnt--;}if(cnt == 1){break;}}cout<<cost<<endl;}return 0;
}
最短路径 迪杰斯特拉
int n;
struct Edge{int from,to,dist;Edge(int u,int v,int d):from(u),to(v),dist(d){}
};
struct HeapNode{int d,u;HeapNode(int td,int tu) : d(td) , u(tu) { }bool operator < (const HeapNode& rhs) const{return d > rhs.d;}
};
struct Dijkstra{int m;vector<Edge> edges;vector<int> G[maxn];bool done[maxn];int d[maxn];int p[maxn];void init(){for(int i = 0; i <= n+1;i++){G[i].clear();}edges.clear();}void AddEdge(int from,int to,int dist){edges.push_back(Edge(from,to,dist));m = edges.size();G[from].push_back(m-1);}void dijkstra(int s){priority_queue <HeapNode> Q;for(int i = 0; i <= n+1; i++){d[i] = INF;}d[s] = 0;memset(done,0,sizeof(done));Q.push(HeapNode(0,s));while(!Q.empty()){HeapNode x = Q.top();Q.pop();int u = x.u;if(done[u]) continue;done[u] = true;for(int i = 0; i < G[u].size();i++){Edge &e = edges[G[u][i]];if(d[e.to] >= d[u] + e.dist){d[e.to] = d[u] + e.dist;p[e.to] = u;Q.push(HeapNode(d[e.to],e.to));}else if(d[e.to] == d[u] + e.dist){p[e.to] = min(G[u][i], p[e.to]);}}}}
}D;
int main(){std::ios::sync_with_stdio(false);int T,m;cin>>T;while(T--){D.init();cin>>n>>m;int u,v,w;for(int i = 0; i < m;i++){cin>>u>>v>>w;D.AddEdge(v,u,w);}D.dijkstra(n+1);if(D.d[0] >= INF){cout<<-1<<endl;}else if(D.p[0] == n+1){cout<<0<<endl;}else{cout<<D.p[0]<<endl;}}return 0;
}
母函数:
多项式为:(1+x)*(1+x^2)*(1+x^10+x^15)= (1+x^2+x+x^3)*(1+x^10+x^15) = (1+x^10+x^15) + x^2*(1+x^10+x^15) +x*(1+x^10+x^15) +x^3*(1+x^10+x^15) =(1+x^10+x^15) +(x^2+x^12+x^17) +(x+x^11+x^16) +(x^3+x^13+x^18)=1+x+x^2+x^3+x^10+x^11+x^12+x^13+x^15+x^16+x^17+x^18
int main(){int v[] = {1,2,5};int n1[] = {0,0,0};int n2[3];int a[maxn],b[maxn];while(cin>>n2[0]>>n2[1]>>n2[2] && (n2[0] != 0 || n2[1] != 0 || n2[2] != 0)){int k = n2[0]+2*n2[1]+5*n2[2];memset(a,0,sizeof(a));a[0] = 1;for(int i = 0;i<=2;i++){memset(b,0,sizeof(b));for(int j = n1[i];j<=n2[i]&&j*v[i]<=k;j++){for(int t = 0; t+j*v[i]<=k;t++){b[t+j*v[i]] += a[t];}}memcpy(a,b,sizeof(b));}bool f = true;for(int i = 1;i < k;i++){if(a[i]==0){cout<<i<<endl;f = false;break;}}if(f){cout<<k+1<<endl;}}return 0;
}
广搜
int bfs(int n)
{queue<node> que;node fr,en;fr.n=n,fr.step=0;book[n]=1;que.push(fr);while(!que.empty()){fr=que.front();que.pop();if(fr.n==K)return fr.step;for(int i=0;i<3;i++){step[2]=fr.n;en.n=fr.n+step[i];if(en.n>=0&&en.n<=Max&&book[en.n]==0){book[en.n]=1;en.step=fr.step+1;que.push(en);}}}return -1;
}
素数筛法(1不是素数)
int prime[maxn];
bool is_prime[maxn];int sieve(int n){int p = 0;for(int i = 0; i <= n; ++i)is_prime[i] = true;is_prime[0] = is_prime[1] = false;for (int i = 2; i <= n; ++i){ // 注意数组大小是nif(is_prime[i]){prime[p++] = i;for(int j = i + i; j <= n; j += i)//轻剪枝,j必定是i的倍数is_prime[j] = false;}}return p; // 返回素数个数
}
在ACM的巨坑里挣扎的弱鸡整理的模板相关推荐
- mybatis的xml里的sql如何使用注释,以及使用 `--` 进行注释的巨坑
mybatis的xml里的sql如何使用注释,以及使用 -- 进行注释的巨坑 结论:使用 <!-- 注释 -->,千万别用 --(pgsql) 或者 #(mysql) 之类的,有巨大的坑! ...
- 沙漠上不小心挖了个洞,让这个地狱之门般的巨坑,燃烧了50年
全世界只有3.14 % 的人关注了 爆炸吧知识 在土库曼斯坦的卡拉库姆沙漠深处,有一个神奇的巨坑,直径约为70米,它无论白天还是黑夜,永远都在燃烧. 这个坑的周围一片荒芜,坑里也没有任何明显在助燃的东 ...
- Flutter打包apk中的一些巨坑
许多人在使用Flutter打包apk时都会参照文档的做法,但是按照文档基本上是百分之百失败的[手动狗头],官网的做法是这样的(可以不用看) 官网做法 但是方法基本不可行. 下面介绍一下正确的打包姿势 ...
- html onclick事件无效 巨坑
html onclick事件无效 html无法触发onclick 最近在学习JavaScript的时候,想copy别人的csdn博客上的一个例子 例子1链接 结果onclick死活绑不上去,然后又试了 ...
- Android如何动态更换桌面图标(巨坑)
转载https://blog.csdn.net/pangjl1982/article/details/83308512 1.Android如何动态更换桌面图标 1.1使用场景 APP,在中 ...
- 微信小程序服务商模式支付巨坑解决!
今日有个在同一个小程序支付 款项需要付到不同的银行卡里去??? 于是找了下微信小程序支付文档,只有个requestPayment方法 emmm 去看看小程序后台吧 ok 有个微信支付 但是只能绑定一 ...
- synplify成功运行起designware的方法,巨坑
因为手头FPGA是zynq ultrascale+.所以更新了synplify到2019版本.手里的项目必须要用designware来做验证.各种研究,填了N多的坑.终于搞定. 先说原理: 1. 电脑 ...
- Python发邮件遇到的巨坑
因网站需要,准备添加一个邮箱绑定的功能.使用的是django框架,因为它已经封装好了发邮件的模块,想来不会太难.结果一试,553.553.553-然后,一天过去了- 1.使用QQ邮箱发邮件 上 ...
- 深度学习的可解释性方向的研究是不是巨坑?
链接:https://www.zhihu.com/question/341190239 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 本人是19fall入学phd一枚,即将决定未来的研究方向, ...
最新文章
- Unity Game窗口中还原Scene窗口摄像机操作 强化版
- 考研英语一2016年真题4篇阅读词汇句子积累(详细!!!)
- 12省联考2019口胡
- 鼠标在计算机上被关闭了怎么处理,鼠标驱动程序丢失导致系统自动关闭的解决方法...
- ASP.NET 连接MySql数据库
- 测试集准确率不变_这个医疗AI准确率突破天际,招来了铺天盖地的质疑
- Nginx location执行顺序和匹配规则
- 五种方法,教你如何在Mac上查看文件完整路径
- 数位DP入门之hdu 3652 B-number
- Netty入门3之----Decoder和Encoder
- 开源新手必看7个小技巧
- 开发者注意!盘一盘 iOS 14 中 Swift 和 SwiftUI 的使用情况
- 如果SQL Server 配置管理器没有找到就代表安装失败?
- 贝塞尔曲线初识 (数学)
- echart多个柱状图 设置y轴显示_Origin做多因子柱状图
- RichText widgets require a Directionality widget ancestor.
- pixi 小游戏_pixi2d小游戏跳一跳源码/pixi教程,基于pixi-spine的2d游戏
- Xshell下载安装(解决评估过期问题)
- 谷粒商城基础篇-1.分布式基础概念架构图与功能模块图
- 2021-07-16 yarn Total VCores allocated for Containers 与服务器上cpu核数不一致原因