模板
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;
}