求助WA#3
查看原帖
求助WA#3
498612
Saka_Noa楼主2022/8/30 18:23
#include<bits/stdc++.h>
using namespace std;
#define MAX 1000010
#define f(i,a,b) for(int i = a;i <= b;i++)
string A[MAX] , B , C;
int P[MAX];
int len;
int n;

void init(int j = 0) {
	f(i,2,len) {
		if(j && C[i] != C[j+1]) j = P[j];
		j += C[i] == C[j+1];
		P[i] = j;
	}
}

int main(){
	cin >> n;
	f(i , 1 , n) {
		A[i] = " ";
		cin >> B;
		A[i] += B;
	}
	
	B = "";
	
	f(i , 1 , n) {
		int lenb = B.length() , lena = A[i].length() - 1;
		if(lenb < lena)  C = A[i]  + "@^$@@(#*&@*#)" + B;
		else {
			string next(B,lenb - lena , lena);
			C = A[i] + "@^$@@(#*&@*#)"+ next;
		}
		//cout << C << " ";
		//cout << P[len] << endl;
		//cout << C << endl;
		len = C.length() - 1;
		init();
		string Now(A[i],P[len] + 1,A[i].length() - 1 - P[len]);
		B += Now;
	}
	
	//string ans(B,1,B.length()-1);
	cout << B;
	return 0;
}
2022/8/30 18:23
加载中...