Cod sursa(job #2674023)
| Utilizator | Data | 18 noiembrie 2020 14:27:29 | |
|---|---|---|---|
| Problema | Prefix | Scor | 90 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.77 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
char s[1000009];
int prefix[1000009],n,i,j,t;
int main()
{
fin>>t;
while(t--)
{
fin>>s;
n=strlen(s);
j=0;
for(i=1;i<n;i++)
{
while(j>0&&s[i]!=s[j])
j=prefix[j-1];
if(s[i]==s[j])
j++;
prefix[i]=j;
}
int perioada=0,l=0;
for(i=0;i<=n;i++)
if(prefix[i]!=0)
if(prefix[i]==1)
perioada=i;
else
if(prefix[i]%perioada==0)
l=i+1;
if(l==0&&s[0]==s[1])
l=2;
fout<<l<<'\n';
}
}
