Pagini recente » Cod sursa (job #1206206) | Cod sursa (job #2866779) | Cod sursa (job #484364) | Cod sursa (job #1647085) | Cod sursa (job #1499331)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int t, n, V[1000010];
char S[1000010];
void Prefix()
{
for (int i = 1, k = 0; i < n; i++)
{
if (k && S[k] != S[i]) k = V[k - 1];
if (S[k] == S[i]) k++;
V[i] = k;
}
}
int Solve()
{
Prefix();
for (int i = n - 1; i >= 0; i--)
{
if (V[i] && (i+1) % ((i+1) - V[i]) == 0) return i + 1;
}
return 0;
}
int main()
{
fin >> t;
while (t --)
{
fin.get();
fin.get(S, 1000005, '\n');
n = strlen(S);
fout << Solve() << '\n';
}
fout.close();
return 0;
}