模板

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

 

posted @ 2017-11-08 09:33  GeneralLiu  阅读(199)  评论(0编辑  收藏  举报