
一些模板
lyc1635566ty
这个作者很懒,什么都没留下…
展开
-
快速筛法求质数
#includeusing namespace std;bool vis[11111111];int prime[11111111];int main(){ int n; cin >> n; int tt=0; memset(vis,0,sizeof vis); vis[0]=1;vis[1]=1; for(int i=2;i<=n;i++原创 2016-03-06 14:46:18 · 495 阅读 · 0 评论 -
逆元模板
long long extend_gcd(long long a,long long b,long long &x,long long &y){ if(a==0&&b==0) return -1; if(b==0){x=1;y=0;return a;} long long d=extend_gcd(b,a%b,y,x); y-=a/b*x; return原创 2016-06-19 15:08:08 · 416 阅读 · 0 评论 -
博弈论学习笔记
巴氏博弈eg:hdu2149,2156描述:只有一堆n个石子,每次能取1到m个物品,A先手,问谁能先取完石子思路:这种问题的关键就在于能否取到关键点,比如,这里只能能取到倒数m+2个石子,留下m+1个石子,则后者就必败。结论:如果初始石子是(m+1)的倍数,则先手必败,否则先手必胜。威佐夫博弈eg:hdu2177,hdu5754描述:有两堆物品,每堆都有若干物品。每次可以从一堆中取任意物品,也可以从原创 2017-07-19 16:04:09 · 408 阅读 · 0 评论 -
约瑟夫环笔记+加速优化板子(HDU3089)
今天看到一题和约瑟夫环相关的问题,就把约瑟夫环的板子整了一下。问题描述:n个人围成圈做,编号从0开始到n-1,从第0个人开始报数(从1开始),每次报到m的人出局,然后从后一个人开始继续往后报数。问最后获胜的人是谁。思路:如果下标从0开始,则第一轮m-1被删除。剩下的数就又生成了一个大小为n-1的约瑟夫环。其中对应关系(旧–新)k—-0 k+1—-1 k+2—-2 …… n-1—-n-k-1原创 2017-06-25 20:07:14 · 761 阅读 · 1 评论 -
lucas定理模板
求c(n,m) %p 其中p为素数#include #include using namespace std;typedef long long LLint T,n,m;int fac[N],inv[N],invf[N];inline int cmb(int a,int b){ if(a if(!b)return 1; return f原创 2017-04-01 20:46:09 · 269 阅读 · 0 评论 -
链式前向星模板
struct Edge { int next; ///同一个出发点的另外一条边 int to; ///该条边的终点 int w; ///边的权值}edge[maxn];int head[maxn]; ///以i为起点的第一条储存边的位置。一般初始化为-1int in[maxn];int cnt;void add(int u,int v,int w) { ///添原创 2016-09-06 19:57:26 · 354 阅读 · 0 评论 -
FFT模板
#define pi acos(-1)#define maxn 222222using namespace std;struct plex { ///定义一个复数类 double x, y; plex (double _x = 0.0, double _y = 0.0) : x (_x), y (_y) {} plex operator + (const plex &原创 2016-09-04 17:12:05 · 387 阅读 · 0 评论 -
欧拉函数模版和用法
欧拉函数euler(x)返回的是与x互质的数的个数,如euler(8)=4 ps.8与1,3,5,7四个数互质欧拉函数的通式是 euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中pi是x的约数代码实现:int euler(int n) { int ans=n; for(int i=2;i*i<=n;i++)原创 2016-09-16 13:24:43 · 758 阅读 · 0 评论 -
树状数组模版(单点修改区间求和)(区间修改单点求值)(区间修改区间求和)
eg。hdu1166(单点修改区间求和)#include#define maxn 111111using namespace std;int n;int c[maxn];int b[maxn];int lowbit(int x) { return x&-x;}/**单点修改区间求和**//**add(x,num);sum(r)-sum(l-1);每次x号位置原创 2016-07-23 12:56:50 · 2044 阅读 · 0 评论 -
最长不下降子序列(可以改成最长上升子序列)
#include#define maxn 101111using namespace std;int a[maxn],b[maxn];int Search(int num,int low,int high) { int mid; while(low<=high) { mid=(low+high)/2; if(num>=b[mid]) low=原创 2016-07-29 17:26:08 · 723 阅读 · 0 评论 -
优先队列的一些使用
#includeusing namespace std;struct cmp1{ bool operator ()(int &a,int &b){ return a<b;//最小值优先 }};struct NODE { int x; bool operator < (const NODE &a) const { return原创 2016-03-28 19:47:55 · 327 阅读 · 0 评论 -
gcd
#includeusing namespace std;int gcd(int x,int y) { return y==0?x:gcd(y,x%y);}int main(){ int a=8,b=16; int x=gcd(a,b); cout return 0;}原创 2016-03-09 19:40:56 · 385 阅读 · 0 评论 -
KMP模板
KMP主要就是对每次移动的位置进行了优化移动位数=当前失配前匹配的长度减去最大前缀后缀重叠长度模板#includevoid makeNext(const char P[],int next[]) { int q,k; int m = strlen(P); next[0] = 0; for (q = 1,k = 0; q < m; ++q) {原创 2016-03-28 17:18:50 · 292 阅读 · 0 评论