Pagini recente » Cod sursa (job #1228415) | Cod sursa (job #2791152) | Cod sursa (job #1173065) | Cod sursa (job #2346119) | Cod sursa (job #638229)
Cod sursa(job #638229)
#include<stdio.h>
#include<vector>
using namespace std;
vector < int> p [30];
char a[510];
int b[510],c[510],d[510];
int main()
{
freopen("palm.in","r",stdin);
freopen("palm.out","w",stdout);
int max=0,i=0,j,lim,n,lim2,k;
while(scanf("%c",&a[++i])!=EOF)
{
n=a[i]-'a';
if(a[i]==a[i-1])
{
d[i]=d[i-1]+1;
c[i]=c[i-1]+1;
b[i]=b[i-1]+1;
}
if(a[i]<a[i-1])
{
b[i]=b[i-1]+1;
++c[i];
}
if(a[i]>a[i-1])
{
c[i]=c[i-1]+1;
++b[i];
}
if(!p[n].empty())
{
lim=p[n].size();
for(j=0;j<lim;++j)
if(i-p[n][j]!=1)
{
if(c[p[n][j]]-d[p[n][j]]==b[i-b[i]]-d[i-b[i]])
{
lim2=(1+i-p[n][j])/2;
for(k=0;k<=lim2&&a[i-k]==a[p[n][j]+k];++k);
if(k==lim2+1&&i-p[n][j]+1>max)
max=i-p[n][j]+1;
}
}
else
if(a[i]==a[p[n][j]]&&max==0)
max=2;
}
p[n].push_back(i);
}
if(!max)
max=1;
printf("%d\n",max);
return 0;
}