Cod sursa(job #603600)
Utilizator | UAIC Ion Caliman ion_caliman | Data | 17 iulie 2011 16:46:46 |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.53 kb |
#include <fstream>
#include <string>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
string s;
int v[1000000],i,t;
int prefix()
{
int k=0,i;
v[0]=v[1]=0;
for (i=2; i<s.size(); i++)
{
while (k>0 && s[k+1]!=s[i]) k=v[k];
if (s[k+1]==s[i]) k++;
v[i]=k;
}
for (i=s.size()-1; i>0; i--) if (i%(i-v[i])==0 && v[i]>=i/2 && i>1) break;
g << i << '\n';
}
int main()
{
f >> t;
for (i=0; i<t; i++)
{
f >> s;
s=' '+s;
prefix();
}
}