Cod sursa(job #2327675)
| Utilizator | Data | 24 ianuarie 2019 20:00:05 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1 kb |
#include <fstream>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
string s;
int n;
const int N=1000000+7;
int pr[N];
void build()
{
pr[0]=0;
int p=1,cur=0;
while(p<n)
{
if(s[p]==s[cur])
{
cur++;
pr[p]=cur;
p++;
}
else
{
if(cur==0)
{
p++;
}
else
{
cur=pr[cur-1];
}
}
}
}
int main()
{
int t; fin>>t;
while(t--)
{
fin>>s;
n=s.size();
for(int i=0;i<=n+10;i++) pr[i]=0;
build();
int res=0;
for(int i=0;i<n;i++)
{
int j=i+1;
//fout<<j<<" : "<<pr[i]<<"\n";
if(j%(j-pr[i])==0 && pr[i])
{
res=j;
}
}
fout<<res<<"\n";
}
return 0;
}
/**
{1}
{1}
{1}
**/
