Pagini recente » Cod sursa (job #2491987) | Cod sursa (job #553788) | Cod sursa (job #2560365) | Cod sursa (job #269574) | Cod sursa (job #671801)
Cod sursa(job #671801)
#include<iostream>
using namespace std;
// acbabcbabcaxxxxx
int main()
{
char A[100001];
int smen[100001],sir,right,i,j,n,poz=0;
// ifstream f("pscpld.in");
cin>>A;
n=strlen(A);
//impar
smen[0]=0;
right=0;
poz=0;
for(i=1;i<n;++i)
{
if(right>=i)
{
if( i+smen[2*poz-i]<=right )
smen[i]=smen[2*poz-i];
if(i+smen[i]>right)
{
right=i+smen[i];
poz=i;
}
else if(i+smen[2*poz-i]>right)
{
smen[i]=right-i;
for(j=i-smen[i]-1;j>-1 && 2*i - j < n && A[j] == A[2*i-j]; --j)
smen[i]=i-j;
if(i+smen[i]>right)
{
right=i+smen[i];
poz=i;
}
}
}
else
{
for(j= i - 1 ; j > -1 && 2 * i - j < n && A[j] == A[2*i-j]; --j)
sir=i-j;
smen[i]=sir;
if( i + sir > right )
{
right = i + sir;
poz=i;
}
}
}
for(i=0;i<n;i++)
cout<<smen[i]<<' ';
return 0;
}