Pagini recente » Cod sursa (job #1930799) | Cod sursa (job #275010) | Cod sursa (job #2196642) | Cod sursa (job #608321) | Cod sursa (job #1516968)
#include <iostream>
#include <fstream>
#include <cstring>
#define nmax 1000001
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int t, pref[nmax], lp, nr;
char s[nmax];
void pattern(char s[nmax], int lp)
{
int i, j;
i=1;
j=0;
pref[0] = 0;
while(i < lp)
if(s[i] == s[j])
{
pref[i] = j+1;
i++;
j++;
}
else
if(j == 0)
pref[i++]=0;
else
j=pref[j-1];
}
int cautare(int lp)
{
for(int i=lp-1; i>=0; i--)
if(((i+1) % ((i+1) - pref[i])) == 0 && pref[i])
return i+1;
return 0;
}
int main()
{
fin >> t;
fin.get();
for(int i=1; i<=t; i++)
{
fin.getline(s, nmax);
lp = strlen(s);
pattern(s, lp);
fout<<cautare(lp)<<"\n";
}
return 0;
}