Pagini recente » Cod sursa (job #2013104) | Profil StarGold2 | Monitorul de evaluare | Diferente pentru fmi-no-stress-9/solutii intre reviziile 62 si 63 | Cod sursa (job #2130143)
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <deque>
#define INF 2140000000
#define MOD 1000000007
#define MaxN 2005
using namespace std;
FILE*IN=fopen("elimin2.in","r"),*OUT=fopen("elimin2.out","w");
char str[MaxN],best,b[MaxN][MaxN];
short d[MaxN][MaxN];
int N,s,e,Max=1;
void Solve(int s,int e)
{
char ch=str[s];
fprintf(OUT,"%c",ch);
s++,e--;
while(b[s][e]!=str[s])
s++;
while(b[s][e]!=str[e])
e--;
if(d[s][e]>1)
Solve(s,e);
else if(d[s][e]==1)
fprintf(OUT,"%c",str[s]);
fprintf(OUT,"%c",ch);
}
int main()
{
fscanf(IN,"%s",str+1);
N=strlen(str+1);
for(int i=1;i<=N;i++)
{
d[i][i]=1;
b[i][i]=str[i];
if(str[i]>best)
{
best=str[i];
s=e=i;
}
}
for(int l=1;l<N;l++)
for(int r=1;r<=N-l;r++)
{
int i=r,j=r+l;
d[i][j]=d[i+1][j];
b[i][j]=b[i+1][j];
if(d[i][j-1]>d[i][j]||(d[i][j-1]==d[i][j]&&b[i][j]<b[i][j-1]))
{
d[i][j]=d[i][j-1];
b[i][j]=b[i][j-1];
}
if(str[i]==str[j])
{
d[i][j]=2+d[i+1][j-1];
b[i][j]=str[i];
}
if(d[i][j]>Max||(str[i]==str[j]&&((l>e-s&&best==str[i])||best<str[i])&&d[i][j]==Max))
{
Max=d[i][j];
s=i;
e=j;
best=str[i];
}
}
if(Max==1)
fprintf(OUT,"%c",str[s]);
else Solve(s,e);
return 0;
}