Cod sursa(job #1581428)
| Utilizator | Data | 26 ianuarie 2016 20:04:35 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.62 kb |
#include <fstream>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int t,i,j,pr[1000001],n,k,l[1000001];
string s;
bool ok;
int main()
{
f>>t;
for (i=1;i<=t;i++)
{
f>>s;
n=s.length();
for (j=n;j>=1;j--)
s[j]=s[j-1];
k=0;
for (j=2;j<=n;j++)
{
while(k && s[k+1]!=s[j])
k=pr[k];
if (s[k+1]==s[j])
k++;
pr[j]=k;
}
ok=false;
for (j=n;j>=1;j--)
if (pr[j] && j%(j-pr[j])==0)
g<<j<<'\n',ok=true,j=0;
if (ok==false) g<<0<<'\n';
}
return 0;
}
