rt,用了kmp. 怀疑是substr炸了,但我调不出来。。。
#include<bits/stdc++.h>
using namespace std;
int n;
string s[100005],kk;
int nex[1005550],las;
int get_bor(int ind){
if(s[ind].size()>s[ind+1].size()) kk=s[ind+1]+(s[ind].substr(s[ind].size()-s[ind+1].size(),s[ind+1].size()));
else kk=s[ind+1].substr(0,s[ind].size())+s[ind];
int nn=kk.size(),j=-1;
nex[las]=-1;
for(int i=1;i<nn;i++){
while(j!=-1&&kk[j+1]!=kk[i]) j=nex[las+j];
if(kk[j+1]==kk[i]) j++;
nex[las+i]=j;
}
las+=nn;
return nex[las-1];
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i];
}
for(int i=0;i<n-1;i++){
int aaa=get_bor(i);
if(i==0) for(int j=0;j<s[i].size();j++) printf("%c",s[i][j]);
for(int j=aaa+1;j<s[i+1].size();j++) printf("%c",s[i+1][j]);
}
return 0;
}