• 模板


    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 ",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
    ",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;
    }
    
  • 相关阅读:
    8张图理解Java
    PhotoShop切图
    Java中堆内存和栈内存详解【转】
    Java编程性能优化一些事儿【转】
    Java反射机制--笔记
    JUnit单元测试--IntelliJ IDEA
    深入理解Java:自定义java注解
    基于值函数的强化学习 小例子(策略退化)
    动态规划中 策略迭代 和 值迭代 的一个小例子
    爬格子问题(经典强化学习问题) Sarsa 与 Q-Learning 的区别
  • 原文地址:https://www.cnblogs.com/1227xq/p/7802446.html
Copyright © 2020-2023  润新知