RE #3求调
查看原帖
RE #3求调
507256
oldove_laotofu楼主2024/6/18 19:21

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;
}
2024/6/18 19:21
加载中...