Cod sursa(job #1975083)
| Utilizator | Data | 29 aprilie 2017 20:59:16 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.49 kb |
#include <fstream>
#include <vector>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
typedef vector <int> vi;
int T,n;
string s;
vi p(1000001,0);
void prefix(){
p[1]=0;
int k=0,lmax=0;
for(int i=2;i<=n;i++){
while(k && s[i]!=s[k+1]) k=p[k];
if(s[i]==s[k+1])k++;
p[i]=k;
if(k && k%(i-k)==0)lmax=i;
}
g<<lmax<<'\n';
}
int main(){
f>>T;f.get();
while(T--){
getline(f,s);
n=s.size();
s.insert(s.begin(),' ');
prefix();
}
}
