• [SHOI2006] 有色图


    题面在这里!

        和上个题就是一样的啦,只不过颜色数从2变成了k,模数不再固定(不可以打表啦2333)

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    
    inline int add(int x,int y,const int ha){ x+=y; return x>=ha?x-ha:x;}
    inline void ADD(int &x,int y,const int ha){ x+=y; if(x>=ha) x-=ha;}
    
    inline int ksm(int x,int y,const int ha){
    	int an=1;
    	for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha;
    	return an;
    }
    
    int gcd[73][73],n,ans,jc[73],ni[73],k,ci[23333];
    int m,a[65],tot,now,C[73][73],b[65],p;
    
    inline void calc(){	
        const int ha=p;
    
        m=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=b[i];j++) a[++m]=i;
    
    	tot=0,now=1;
    	for(int i=1;i<=m;i++) tot+=a[i]>>1;
    	for(int i=1;i<=m;i++)
    	    for(int j=i+1;j<=m;j++) tot+=gcd[a[i]][a[j]];
    	
    	
    	for(int T=n,i=1;i<=m;T-=a[i],i++) now=now*(ll)C[T][a[i]]%ha*(ll)jc[a[i]-1]%ha;
    	for(int i=1;i<=n;i++) if(b[i]>1) now=now*(ll)ni[b[i]]%ha;
    	
    	ADD(ans,now*(ll)ci[tot]%ha,ha);
    }
    
    void dfs(int x,int lef){
    	if(lef<x){ if(!lef) calc(); return;}
    	for(int i=0,u=0;u<=lef;i++,u+=x) b[x]=i,dfs(x+1,lef-u),b[x]=0;
    }
    
    int main(){	
        scanf("%d%d%d",&n,&k,&p);
        const int ha=p;
        
        ci[0]=1; for(int i=1;i<=3000;i++) ci[i]=ci[i-1]*(ll)k%ha;
        
    	jc[0]=1; for(int i=1;i<=60;i++) jc[i]=jc[i-1]*(ll)i%ha;
    	ni[60]=ksm(jc[60],ha-2,ha);
    	for(int i=60;i;i--) ni[i-1]=ni[i]*(ll)i%ha;	
    	
    	C[0][0]=1;
    	for(int i=1;i<=60;i++){
    		C[i][0]=1;
    		for(int j=1;j<=i;j++) C[i][j]=add(C[i-1][j-1],C[i-1][j],ha);
    	}
    	
    	for(int i=0;i<=n;i++)
    	    for(int j=0;j<=i;j++)
    	        if(!i||!j) gcd[i][j]=i+j;
    	        else gcd[j][i]=gcd[i][j]=gcd[j][i%j];
    	
        dfs(1,n),ans=ans*(ll)ni[n]%ha;
    	
    	printf("%d
    ",ans);
    	return 0;
    } 
    

      

  • 相关阅读:
    功能测试用例大全
    相对最完整的软件测试工具手册
    测试用例的评审
    黑盒测试学习笔记-(深圳文鹏)
    Llinux:ubuntu常用命令(深圳文鹏)
    HDU-4857(拓扑排序)
    HDU-3665(单源最短路)
    HDU-3661(贪心)
    HDU-2059龟兔赛跑(基础方程DP-遍历之前的所有状态)
    HDU-1047(DP-二进制状态压缩)
  • 原文地址:https://www.cnblogs.com/JYYHH/p/9245098.html
Copyright © 2020-2023  润新知