Pagini recente » Cod sursa (job #1372473) | Cod sursa (job #1160224) | Cod sursa (job #938444) | Cod sursa (job #2700302) | Cod sursa (job #1642852)
#include<iostream>
#include<stack>
#include<deque>
#include<queue>
#include<string>
#include<vector>
#include<algorithm>
#include<fstream>
#include<string.h>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int NMAX = 1000005;
char s[NMAX];
int N,poz[NMAX],M;
void init()
{
for(int i = 1 ; i <= M ; ++i)
poz[i] = 0;
}
int solve()
{
int k = 0,ret =0;
poz[1] = 0;
for(int i = 2 ; i <= M ; ++i){
while(k && s[k + 1] != s[i])
k = poz[k];
if(s[k+1] == s[i])
++k;
poz[i] = k;
if( poz[i] % (i - poz[i]) == 0 && poz[i] *2 >= i)
ret = i;
}
return ret;
}
int main()
{
in>>N;
for( ; N ; --N){
in>>s + 1;
M = strlen(s + 1);
init();
out<<solve()<<"\n";
}
in.close();
out.close();
return 0;
}