Cod sursa(job #3281053)
Utilizator | Data | 28 februarie 2025 11:05:26 | |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.61 kb |
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int t,n,pi[1000005];
char s[1000005],S[1000005];
int main()
{
fin>>t;
while (t--)
{
fin>>S;
strcpy (s+1,S);
int k=0,sol=0;
n=strlen (s+1);
for (int i=2; i<=n; i++)
{
while (k>0&&s[i]!=s[k+1])
k=pi[k];
if (s[i]==s[k+1])
k++;
pi[i]=k;
if (pi[i]>0&&i%(i-pi[i])==0)
sol=i;
}
fout<<sol<<"\n";
}
return 0;
}