Cod sursa(job #1401600)

Utilizator LycrsTrifan Tamara Lycrs Data 26 martie 2015 00:11:02
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <fstream>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include<cstring>

using namespace std;
ifstream cin("prefix.in");
ofstream cout("prefix.out");
const int O=1000005;
int n, i, j, m, a, x, prefix[O];
string  p;

void MakePrefix(){
	a=prefix[1]=0;
	
	for(j=2; j<=m; ++j)
	{
		while(a && p[a+1]!=p[j]) a=prefix[a];
		if (p[a+1]==p[j]) ++a;
		prefix[j]=a;
	}
}

int main()
{
	
	int t;
	cin>>t;
	while(t--)
	{
		bool u=1;
		cin>>p;
		m=p.size(); p=" "+p;
	
		MakePrefix();
		for(i=m; i>0; --i)
			if (prefix[i]>0 && i%(i-prefix[i])==0)
				cout<<i<<'\n', i=0, u=0;
		if (u) cout<<"0\n";
		
	}
	
	
	return 0;
}