标签:比较 str pre long i++ space using 字符串hash ++
#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); }
标签:比较 str pre long i++ space using 字符串hash ++
原文地址:https://www.cnblogs.com/zsben991126/p/11625961.html