Mai intai trebuie sa te autentifici.
Cod sursa(job #1457746)
Utilizator | Data | 4 iulie 2015 13:49:53 | |
---|---|---|---|
Problema | Prefix | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.71 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
const int Dim = 1000001;
int T,P[Dim],Sol;
char S[Dim];
int main()
{
fin >> T;
fin.getline(S,Dim);
while(T--)
{
fin.getline(S,Dim);
memset(P,0,sizeof(P));
Sol = 0;
int N = strlen(S),it = 0;
for (int i = 1;i < N;i++)
{
while(it && S[it] != S[i])
it = P[it - 1];
if (S[it] == S[i])
it++;
P[i] = it;
if (P[i] && !((i + 1) % (i + 1 - P[i])))
Sol = i + 1;
}
fout << Sol << "\n";
}
return 0;
}