Nu aveti permisiuni pentru a descarca fisierul grader_test26.in
Cod sursa(job #1203910)
| Utilizator | Data | 1 iulie 2014 15:31:37 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.83 kb |
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
int t,z[1000005];
char s[1000005];
int main()
{
ifstream in ("prefix.in");
ofstream out ("prefix.out");
in>>t;
for (;t>0;--t)
{
in>>s;
int n=strlen(s),st=0,dr=0,maxim=0;
for (int i=1;i<n;++i)
{
if (i<=dr)
{
z[i]=dr-i+1;
if (z[i]>z[i-st]) z[i]=z[i-st];
}
while (i+z[i]<n && s[z[i]]==s[i+z[i]]) ++z[i];
if (dr<i+z[i]-1) dr=i+z[i]-1,st=i;
if (z[i]>z[maxim] && z[i]>=i) maxim=i;
}
int j=maxim;
if (maxim>0) while (z[j]>=maxim) j=j+maxim;
out<<j<<"\n";
for (int i=0;i<n;++i) z[i]=0;
}
in.close();
out.close();
return 0;
}
