Cod sursa(job #1653197)

Utilizator valentin50517Vozian Valentin valentin50517 Data 15 martie 2016 19:49:53
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");

string S;
int p[1000100];
int T,rs;

int main(){
	
	for(fin >> T;T--;){
		fin >> S;
		int N = S.length(),i,k,l,n;
		l = k = rs = n = 0;
		for(int i = 1;i<=N;i++) p[i] = 0;
		for(i = 2;i<=N;i++){
			while(k && S[k] != S[i-1]) 
				k = p[k];
			if(S[k] == S[i-1]) k++;
			p[i] = k;
			
			if(k && i-k == l) n++;
			else
			if(k && i-k > l) l = i-k, n = 1;
			else n = 0;
			if(n && n >= l) rs = l*(n/l+1);
			//fout << S[i-1] << ' ' << k << ' ' << l << ' ' << n << ' ' << rs << '\n';
		}
		fout << rs << "\n"; 
	}
		
}