模板
KMP P3375
void iGetnext(){ for(int i=1,j=0;i<len2;i++){ for(;j && b[i]!=b[j];j=pre[j]); if(b[i]==b[j])j++; pre[i+1]=j; }
}
void iFind(){ for(int i=0,j=0;i<len1;i++){ for(;j && a[i]!=b[j];j=pre[j]); if(a[i]==b[j])j++; if(j==len2){ printf("%d\n",i-len2+2); j=pre[j]; } }
}
快排 P1177
void iQsort(int l,int r){ if(l==r)return; int i=l,j=r,m=a[(l+r)>>1]; for(;i<=j;){ for(;a[i]<m;i++); for(;a[j]>m;j--); if(i<=j){ swap(a[i],a[j]); i++,j--; } } if(l<j)iQsort(l,j); if(i<r)iQsort(i,r); }
矩阵 快速幂 P1939
struct aa{ LL n,m,v[4][4]; aa(){ n=0,m=0; memset(v,0,sizeof(v)); } }A,E,e; inline aa operator *(aa x,aa y){ aa ret; LL tmp; ret.n=x.n,ret.m=y.m; for(int i=1;i<=ret.n;i++) for(int j=1;j<=ret.m;j++){ tmp=0; for(int k=1;k<=x.m;k++) tmp=(tmp+((x.v[i][k]*y.v[k][j])%P))%P; ret.v[i][j]=tmp; } return ret; } inline aa iPow(aa x,int k){ aa ret=e; for(;k;k>>=1){ if(k&1)ret=ret*x; x=x*x; } return ret; } inline LL iCalc(LL x){ if(x<=3)return 1; aa ret,tmp; ret.n=1,ret.m=3; ret.v[1][1]=ret.v[1][2]=ret.v[1][3]=1; tmp=iPow(E,x-3); tmp=A*tmp; return tmp.v[1][1]; } int main(){ A.m=e.n=e.m=E.n=E.m=3; A.v[1][3]=A.v[1][2]=A.v[1][1]=A.n=e.v[3][3]=e.v[2][2]=e.v[1][1]=E.v[1][1]=E.v[1][2]=E.v[2][3]=E.v[3][1]=1; n=iRead(); for(;n--;)printf("%d\n",iCalc(iRead())); return 0; }
Kruskal P3366
int iFind(int x){return f[x]==x?x:f[x]=iFind(f[x]);} inline void iKruskal(){ ans=0,cnt=1; for(int i=1;i<=n;i++)f[i]=i; sort(e+1,e+m+1,iCmp); for(int i=1,x,y;i<=m;i++){ x=iFind(e[i].from),y=iFind(e[i].to); if(x!=y){ f[x]=y; cnt++; ans+=e[i].dis; if(cnt==n)break; } } if(cnt==n)cout<<ans; else cout<<"orz"; }
P3371 SPFA
void iSpfa(){ que[++ta]=s;ins[s]=1; for(int u,v,d;ta>=he;){ u=que[he++]; ins[u]=0; for(int i=head[u];i;i=e[i].nextt){ v=e[i].to,d=dis[u]+e[i].dis; if(d<dis[v]){ dis[v]=d; if(!ins[v])que[++ta]=v,ins[v]=1; } } } }
dijkstra
#define Heap pair<int,int> priority_queue<Heap,vector<Heap>,greater<Heap> >que; void iDijkstra(){ dis[s]=0; que.push(make_pair(0,s)); for(int tmp,u,v;!que.empty();){ u=que.top().second; que.pop(); if(vis[u])continue; vis[u]=1; for(int i=head[u];i;i=e[i].nextt){ v=e[i].to; tmp=dis[u]+e[i].dis; if(tmp<dis[v]){ dis[v]=tmp; que.push(make_pair(tmp,v)); } } } }
字符串哈希 P3370
#define base 19260817 char s[N]; unsigned long long n,len,hash,ans,b[N]; for(int j=0;j<n;j++){ scanf("%s",s); len=strlen(s); hash=0; for(int i=0;i<len;i++) hash=hash*base+s[i]; b[j]=hash; } sort(b,b+n); cout<<(unique(b,b+n)-b);
线性筛 P3383
for(int i=2;i<=n;i++){ if(!b[i])prim[++cnt]=i; for(int j=1;j<=cnt && i*prim[j]<=n;j++){ b[i*prim[j]]=1; if(!(i%prim[j]))break; } } for(int x,p;q--;){ scanf("%d",&x); p=lower_bound(prim+1,prim+cnt+1,x)-prim; if(prim[p]==x)puts("Yes"); else puts("No"); }
P3379 倍增LCA
void iDfs(int u){ int v; for(int i=0;f[u][i];i++)f[u][i+1]=f[f[u][i]][i]; for(int i=head[u];i;i=e[i].nextt){ v=e[i].to; if(!deep[v]){ deep[v]=deep[u]+1; f[v][0]=u; iDfs(v); } } } inline int iLca(int x,int y){ if(deep[x]<deep[y])swap(x,y); for(int i=19;i>=0;i--) if(deep[f[x][i]]>=deep[y]) x=f[x][i]; if(x==y)return x; for(int i=19;i>=0;i--) if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i]; return f[x][0]; } deep[s]=1; iDfs(s);
EXGCD P1082
#include<iostream> using namespace std; int a,b,x,y; void iExgcd(int a,int b,int &x,int &y){ if(!b){x=1,y=0;} else{iExgcd(b,a%b,y,x);y-=x*(a/b);} } int main(){ cin>>a>>b; iExgcd(a,b,x,y); cout<<((x%b)+b)%b; return 0; }