Pagini recente » Cod sursa (job #1039136) | Cod sursa (job #2987917) | Cod sursa (job #470919) | Cod sursa (job #894330) | Cod sursa (job #1976025)
#include <fstream>
#include <cstring>
using namespace std;
char s[1000005];
int prefix[1000005];
void buildPrefix(int l)
{
prefix[1] = 0;
for(int i = 2, j = 0; i <= l; ++i)
{
while(j && s[j+1] != s[i]) j = prefix[j];
if(s[j+1] == s[i]) j++;
prefix[i] = j;
}
}
int main()
{
ifstream fin ("prefix.in");
ofstream fout("prefix.out");
int t, n;
fin >> t;
fin.get();
while(t--)
{
fin.getline(s+1, 1000005);
n = strlen(s+1);
buildPrefix(n);
int i;
for(i = n; i; --i)
if(prefix[i] && prefix[i] % (i - prefix[i]) == 0)
{
fout << i << '\n';
break;
}
if(!i) fout << "0\n";
}
fin.close(); fout.close();
return 0;
}