莫名UKE
查看原帖
莫名UKE
109220
Farkas_W楼主2021/3/11 10:22
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define re register int
#define il inline
#define next neert
using namespace std;
int n,next[1000005];
il void KMP(string s)
{
	int len=s.size(),j=0;
	s=' '+s;next[0]=next[1]=0;
	for(re i=2;i<=len;i++)
	{
		while(j&&s[i]!=s[j+1])j=next[j];
		if(s[i]==s[j+1])j++;
		next[i]=j;
	}
}
signed main()
{
	string s1,s2;
	scanf("%d",&n);cin>>s1;n--;
	while(n--)
	{
		cin>>s2;
		int len1=s1.size(),len2=s2.size();
		string s=s2+"#*/&@$-"+s1.substr(len1-min(len1,len2),min(len1,len2));
		KMP(s);
		for(re i=next[s.size()];i<len2;i++)s1+=s2[i];
	}
	cout<<s1;
	return 0;
}
2021/3/11 10:22
加载中...