• 【BZOJ3555】企鹅QQ(字符串哈希)


    【BZOJ3555】企鹅QQ(字符串哈希)

    题面

    BZOJ

    题解

    把前缀哈希一下,后缀哈希一下
    枚举哪个位置不选,然后检查一下相同就行了。。
    为什么我的(Hash)老是(WA)
    为什么(Zsy)一遍(AC)。、。
    无奈啊。。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    #define ull unsigned long long
    #define RG register
    int n,L,ans,sig;
    ull pre[30003][222],suf[30003][222],Suf[30003][222],S[30003];
    char T[222];
    int main()
    {
    	scanf("%d%d%d",&n,&L,&sig);
    	for(int i=1;i<=n;++i)
    	{
    		scanf("%s",T+1);
    		for(int j=1;j<=L;++j)pre[i][j]=pre[i][j-1]*19260817+T[j];
    		for(int j=L;j>=1;--j)suf[i][j]=suf[i][j+1]*998244353+T[j];
    		for(int j=L;j>=1;--j)Suf[i][j]=Suf[i][j+1]*1000000007+T[j];
    	}
    	for(int i=1;i<=L;++i)
    	{
    		for(int j=1;j<=n;++j)S[j]=pre[j][i-1]*1007+suf[j][i+1]*197+Suf[j][i+1];
    		sort(&S[1],&S[n+1]);
    		for(int j=2,s=1;j<=n;++j)
    			if(S[j]==S[j-1])ans+=s++;
    			else s=1;
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
    
  • 相关阅读:
    强联通 HDU 1269
    zznu 1255 数字统计(数位DP, 数学方法)
    POJ Round Numbers(数位DP)
    #1033 : 交错和
    XHXJ's LIS
    吉哥系列故事——恨7不成妻
    数字0-9的数量
    Balanced Number
    BALNUM
    F(x)
  • 原文地址:https://www.cnblogs.com/cjyyb/p/8821415.html
Copyright © 2020-2023  润新知