Pagini recente » Cod sursa (job #565107) | Cod sursa (job #2678111) | Cod sursa (job #599053) | Cod sursa (job #1378878) | Cod sursa (job #3246062)
#include <bits/stdc++.h>
const std :: string FILENAME = "prefix";
std :: ifstream f (FILENAME + ".in");
std :: ofstream g (FILENAME + ".out");
const int NMAX = 1e6 + 5;
int t;
int k;
bool ok;
int pi[NMAX];
std :: string s;
void prefix()
{
for(int i = 1; i < s.size(); i ++)
{
int j = pi[i - 1];
while(j > 0 && s[j] != s[i])
{
j = pi[j - 1];
}
if(s[j] == s[i])
{
j ++;
}
pi[i] = j;
}
}
int main()
{
f >> t;
while(t --)
{
f >> s;
prefix();
ok = false;
for(int i = s.size() - 1; i > 0; i --)
{
k = (i + 1) - pi[i];
if(k == i + 1)
{
continue;
}
if((i + 1) % k == 0)
{
ok = true;
g << i + 1 << '\n';
break;
}
}
if(ok == false)
{
g << 0 << '\n';
}
}
return 0;
}