Pagini recente » Borderou de evaluare (job #815899) | Cod sursa (job #815696) | Cod sursa (job #815833) | Borderou de evaluare (job #335099) | Cod sursa (job #2708860)
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int build_kmp(string a)
{
int na=a.length();
vector<int>t(na,0);
int ans=0;
for(int i=1;i<na;i++)
{
int k=t[i-1];
while(true){
if(a[k]==a[i])
{
t[i]=k+1;
break;
}
else if(k==0)
{
t[i]=0;
break;
}
else k=t[k-1];
}
int hossz=i-t[i]+1;
if (t[i] && !((i+1) %hossz)) {
ans = max(ans, i + 1);
}
}
return ans;
}
int main()
{
ifstream be("prefix.in");
ofstream ki("prefix.out");
int n;
be>>n;
for(int i=0;i<n;i++)
{
string a;
be>>a;
ki<<build_kmp(a)<<"\n";
}
return 0;
}