Pagini recente » Cod sursa (job #569251) | Cod sursa (job #21317) | Cod sursa (job #2589529) | Cod sursa (job #1441182) | Cod sursa (job #2732757)
#include <fstream>
#include <string>
using namespace std;
const int LMAX = 1000000;
string sir;
int prefix[1 + LMAX];
int main()
{
ifstream in("prefix.in");
ofstream out("prefix.out");
int t;
in >> t;
for (int i = 1; i <= t; i++)
{
in >> sir;
sir = ' ' + sir;
prefix[1] = 0;
int pi = 0;
int sol = 0;
for (int i = 2; i < sir.size(); i++)
{
while (pi > 0 && sir[i] != sir[1 + pi])
{
pi = prefix[pi];
}
if (sir[i] == sir[1 + pi])
{
pi++;
}
prefix[i] = pi;
if (pi > 0 && i % (i - pi) == 0)
{
sol = i;
}
}
out << sol << '\n';
}
return 0;
}