暴力字符串hash——cf1200E
Posted zsben991126
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暴力字符串hash——cf1200E相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h> using namespace std; #define ll long long #define N 1000005 #define mod 1000000007 #define P 131 char s[N],buf[N]; int n,lens; ll has[N],p[N],has1[N]; int main() p[0]=1; for(int i=1;i<=1000000;i++)p[i]=p[i-1]*P%mod; cin>>n; scanf("%s",s+1); lens=strlen(s+1); for(int i=1;i<=lens;i++) has[i]=(has[i-1]*P%mod+s[i]%mod)%mod; for(int i=2;i<=n;i++) scanf("%s",buf+1); int lenb=strlen(buf+1); //求buf的hash值 for(int j=1;j<=lenb;j++) has1[j]=(has1[j-1]*P%mod+buf[j]%mod)%mod; //比较s和buf min(lens,lenb)个串 int len=min(lens,lenb); int j; for(j=len;j>=1;j--)//枚举s的后缀,buf的前缀 ll hass=(has[lens]-has[lens-j]*p[j]%mod+mod)%mod; ll hasb=has1[j]; if(hass==hasb)break; for(int k=j+1;k<=lenb;k++) s[++lens]=buf[k]; has[lens]=(has[lens-1]*P%mod+buf[k]%mod)%mod; //lens+=lenb-j; printf("%s",s+1);
以上是关于暴力字符串hash——cf1200E的主要内容,如果未能解决你的问题,请参考以下文章
CodeForces727E/CF727EGames on a CD (字符串哈希)