Cod sursa(job #745183)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 10 mai 2012 18:04:22
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include<fstream>
#include<cstring>
using namespace std;

ifstream in("prefix.in");
ofstream out("prefix.out");

#define N 1000003

char c[N];
int n,p[N],t;

void pref() {
	p[1] = 0;
	int k = 0,i;
	
	for(i = 2; i<=n; ++i) {
		
		while(k && c[k + 1]!=c[i])
			k = p[k];
		
		if(c[k + 1] == c[i])
			++k;
		p[i] = k;
	}
}

int af() {
	
	for(int i = n; i; --i)
		if(p[i] && !(i%(i - p[i])))
			return i;
	return 0;
}

int main() {
	
	in >> t;
	in.get();
	
	while(t--) {
		in.getline(c + 1,N);
		n = strlen(c + 1);
		
		pref();
		
		out << af() << "\n";
	}
	
	return 0;
}