Pagini recente » Cod sursa (job #2375947) | Cod sursa (job #2826301) | Cod sursa (job #2323219) | Cod sursa (job #216749) | Cod sursa (job #638945)
Cod sursa(job #638945)
#include<fstream>
#include<cstring>
using namespace std;
int i,j,n,d[501][501],m,l[501],n2,rez,max1=0,ok1,max2;
char a[501],b[501],c,p[501],t[501];
int main()
{
FILE *f=fopen("palm.in","r");
FILE *g=fopen("palm.out","w");
i=1;
while(!feof(f)&&c!='\n')
{
fscanf(f,"%c",&c);
a[i++]=c;
}
n=i-1;
for(i=1;i<=n;i++)
b[n-i]=a[i];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i]==b[j])
d[i][j]=d[i-1][j-1]+1;
else
d[i][j]=max(d[i-1][j],d[i][j-1]);
i=j=n;
while(i>=1)
if(a[i]==b[j])
p[++m]=a[i],l[m]=(int)p[m-1]-(int)p[m],j--,i--;
else
if(d[i-1][j]>d[i][j-1])
i--;
else
j--;
if(m%2)
n2=m/2+1;
else
n2=m/2;
int poz[503];
int k,mij,pp;
max1=0;
for(k=1;k<=n2;++k)
{
i=1;
j=max1;
pp=0;
while(i<=j)
{
mij=(i+j)/2;
if(t[mij]>p[k])
{
pp=mij;
j=mij-1;
}
else
if(t[mij]<=p[k])
i=mij+1;
else
{
pp=mij;
break;
}
}
if(pp==0)
{
++max1;
pp=max1;
}
t[pp]=p[k];
poz[k]=pp;
}
if(n2%2)//||m%2)
fprintf(g,"%d",max1*2-1);
else
fprintf(g,"%d",max1*2);
return 0;
}