Cod sursa(job #1466453)

Utilizator Tester01tester Tester01 Data 29 iulie 2015 11:21:57
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <bits/stdc++.h>
using namespace std;
#define Nmax 1000013

vector <int> KMP (string s){
	vector <int> pi(Nmax,0);
	pi[0]=0;
	for (int i=1;i<s.size();++i){
		int k = pi[i-1];
		while(s[i]!=s[k] && k>0) k = pi[k-1];
		if (s[i]==s[k]) ++k;
		pi[i]=k;
	}
	return pi; 
}

string s;
int t,i;

int main(void) {
 ifstream cin("prefix.in");
 ofstream cout("prefix.out");
 cin>>t;
 while(t--){
 	cin>>s;
 	vector <int> Match = KMP(s);
 	for (i=s.size()-1;i>0;--i)
   	if (Match[i] && (i+1)%(i+1-Match[i])==0) { 
	     cout<<i+1<<"\n";
	     break;
	 }
	if (i==0) cout<<0<<"\n";
 }

 return 0;
}