Pagini recente » Cod sursa (job #1726325) | Cod sursa (job #412375) | Istoria paginii runda/oji_9 | Istoria paginii runda/probleme_de_geometrie/clasament | Cod sursa (job #779952)
Cod sursa(job #779952)
#include<stdio.h>
#include<fstream>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
#define MaxS 1000100
int T;
int Pi[MaxS];
char S[MaxS];
void citire(void)
{
f.getline(S+1,MaxS);
}
inline int Prefix(void)
{
int pi = 0,Sol = 0;
Pi[1] = 0;
for(int i=2;S[i];++ i)
{
while(S[pi+1] != S[i] && pi)
pi = Pi[pi];
if(S[pi+1] == S[i]) ++ pi;
Pi[i] = pi;
if(Pi[i] >= (i>>1))
if(i%(i-Pi[i]) == 0)
Sol = i;
}
return Sol;
}
int main()
{
f >> T; f.get();
for(int i=1;i<=T;i++)
{
citire();
g << Prefix() << "\n";
}
}