Pagini recente » Cod sursa (job #3253346) | Arhiva educationala | Cod sursa (job #3203384) | Cod sursa (job #3284530) | Cod sursa (job #7235)
Cod sursa(job #7235)
#include <fstream>
using namespace std;
int p[1000001];
void prefix(char s[])
{
int i, k, n;
p[1] = 0; k = 0; n = strlen(s);
for (i = 1; i < n; i++)
{
while ( k > 0 && s[k] != s[i] )
k = p[k];
if ( s[k] == s[i] ) k++;
p[i+1] = k;
}
}
int main()
{
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int T;
fin >> T;
fin.get();
while (T--)
{
int n;
char a[1000001];
fin.getline(a, 1000001);
n = strlen(a);
prefix(a);
int k = 0;
for (int i = n; i >= 1; i--)
if (p[i] > 0 && (i % (i - p[i]) == 0)) { k = i; break; }
fout << k << "\n";
}
fin.close();
fout.close();
return 0;
}