• 【BZOJ3555】企鹅QQ


    蛤希。

    用map会T。

    只需要枚举删掉哪个字符,然后算出每个的hash值,sort一遍就行了。

    用map会T!!!

    // It is made by XZZ
    #include<cstdio>
    #include<algorithm>
    #include<map>
    #define il inline
    #define rg register
    #define vd void
    #define sta static
    typedef long long ll;
    il int gi(){
    	rg int x=0,f=1;rg char ch=getchar();
    	while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
    	while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    	return x*f;
    }
    #define mod 998244353
    #define Mod 10000000009
    char s[210];
    ll base[210],f[210],F[30010][210],Base[210],g[210],G[30010][210];
    ll S[30010];
    int main(){
    #ifdef xzz
    	freopen("3555.in","r",stdin);
    	freopen("3555.out","w",stdout);
    #endif
    	int n=gi(),L=gi();gi();
    	ll ans=0;
    	base[0]=1;for(rg int i=1;i<=L;++i)base[i]=base[i-1]*8237%mod;
    	Base[0]=1;for(rg int i=1;i<=L;++i)Base[i]=Base[i-1]*19260817%mod;
    	for(rg int yyb=1;yyb<=n;++yyb){
    		scanf("%s",s+1);
    		for(rg int i=1;i<=L;++i)f[i]=(s[i]*233%2333)*base[i]%mod;
    		F[yyb][1]=0;
    		for(rg int i=1;i<=L;++i)F[yyb][1]+=f[i];
    		F[yyb][1]%=mod;for(rg int i=1;i<=L;++i)F[yyb][i]=F[yyb][1];
    		for(rg int i=1;i<=L;++i)F[yyb][i]=(F[yyb][i]-f[i]+mod)%mod;
    		for(rg int i=1;i<=L;++i)g[i]=(s[i]*233%2333)*Base[i]%Mod;
    		G[yyb][1]=0;
    		for(rg int i=1;i<=L;++i)G[yyb][1]+=g[i];
    		G[yyb][1]%=Mod;for(rg int i=1;i<=L;++i)G[yyb][i]=G[yyb][1];
    		for(rg int i=1;i<=L;++i)G[yyb][i]=(G[yyb][i]-g[i]+Mod)%Mod;
    	}
    	for(rg int i=1;i<=L;++i){
    		for(rg int j=1;j<=n;++j)S[j]=F[j][i]*mod+G[j][i];
    		std::sort(S+1,S+n+1);
    		int t=0;
    		for(rg int j=1;j<=n;++j)
    			if(S[j]==S[j-1])ans+=t++;
    			else t=1;
    	}
    	printf("%lld
    ",ans);
    	return 0;
    }
    
    
  • 相关阅读:
    边框
    文本样式
    框架
    表格
    列表
    标签
    常用类--包装类
    常见类 --Object
    日志
    异常
  • 原文地址:https://www.cnblogs.com/xzz_233/p/8897990.html
Copyright © 2020-2023  润新知