Cod sursa(job #2573027)
Utilizator | Andrei Rebecca rebecca0312 | Data | 5 martie 2020 15:26:50 |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.55 kb |
#include<bits/stdc++.h>
using namespace std;
const int NMAX=1000010;
int prevv[NMAX];
char s[NMAX];
int prefix(){
int k=0,rez=0,n=strlen(s+1);
for(int i=2;i<=n;i++){
while(k>0 && s[k+1]!=s[i])
k=prevv[k];
if(s[k+1]==s[i])
k++;
prevv[i]=k;
if(prevv[i] && prevv[i]%(i-prevv[i])==0)
rez=i;
}
return rez;
}
int main(){
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
int t;
scanf("%d", &t);
for(int i=1;i<=t;i++){
scanf("%s", s+1);
printf("%d\n", prefix());
}
return 0;
}