Pagini recente » Cod sursa (job #1605781) | Cod sursa (job #327534) | Cod sursa (job #2424788) | Cod sursa (job #1400159) | Cod sursa (job #2224655)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const int maxn = 1e6+5, inf = 0x3f3f3f3f;
ifstream f("prefix.in");
ofstream g("prefix.out");
int t, n, prefix[maxn];
string p;
int prefix_calculate()
{
int maxim = 0;
int i, a = 0;
prefix[1] = 0;
for(i = 2; i <= n; i ++)
{
while(a > 0 && p[i] != p[a+1])
a = prefix[a];
if(p[i] == p[a+1])
++a;
prefix[i] = a;
if(prefix[i] >= i - prefix[i])
{
int nextmax = i;
nextmax -= nextmax % (i - prefix[i]);
maxim = nextmax;
}
}
return maxim;
}
int main()
{
f >> t;
for(int i = 1; i <= t; i ++)
{
f >> p;
p = " " + p;
n = p.size() - 1;
g << prefix_calculate() << '\n';
}
return 0;
}