Pagini recente » Cod sursa (job #2832959) | Cod sursa (job #724352) | Cod sursa (job #564635) | Cod sursa (job #231258) | Cod sursa (job #638015)
Cod sursa(job #638015)
#include <stdio.h>
#include <cstring>
#include <cctype>
struct Date
{
int inceput,lungime;
bool special;
};
Date din[501];
int lungmax,lung;
void dostuff(char s[])
{
for(int i=1; i<=lung; i++)
{
int jmax=-1,lmax=-1,cmax=-1;
int crestecu=0;
for(int j=i-1; j>=1; j--)
{
if(s[j]>=s[i])
{
for(int k=din[j].inceput; k>=1; k--)
{
if(s[k]==s[i])
{
if((din[j].lungime==1&&j==k&&din[j].inceput==j)||(s[i]==s[j]&&s[i]==s[din[j].inceput]&&din[j].special))//cazul bb, de exemplu
{
if(din[j].lungime+1>lmax||(din[j].lungime==lmax&&s[k]==s[i]))
{
crestecu=1;
lmax=din[j].lungime+1;
jmax=j;
cmax=k;
}
}
else if(din[j].lungime+2>lmax&&k<din[j].inceput)//nu poate fi altfel :/
{
lmax=din[j].lungime+2;
crestecu=2;
jmax=j;
cmax=k;
}
}
}
}
}
if(jmax!=-1)
{
din[i].inceput=cmax;
din[i].lungime=din[jmax].lungime+crestecu;
din[i].special=false;
if(crestecu==1)
din[i].special=true;
}
else
{
din[i].inceput=i;
din[i].lungime=1;
}
}
for(int i=1; i<=lung; i++)
{
if(din[i].lungime>lungmax)
lungmax=din[i].lungime;
//printf("%d ",din[i].lungime);
}
}
int main()
{
freopen("palm.in", "r",stdin);
freopen("palm.out", "w",stdout);
char s[501];
scanf("%s",s+1);
lung = strlen(s+1);
dostuff(s);
//for(int i=1;i<lung;i++)
// dostuff(s+i);
printf("%d",lungmax);
return 0;
}