Pagini recente » Istoria paginii utilizator/cristina_micu0731 | cartele2 | Diferente pentru utilizator/stargold2 intre reviziile 272 si 271 | Profil Simon2712 | Cod sursa (job #2035880)
#include <bits/stdc++.h>
#define MaxN 2005
#define INF 2140000000
#define MOD 1000000007
using namespace std;
FILE*IN,*OUT;
int N;
struct dynamic
{
short L;
char Digit;
pair<short,short>to;
}d[MaxN][MaxN];
char str[MaxN],out[MaxN];
bool comp(dynamic a,dynamic b)
{
return a.L<b.L||(a.L==b.L&&a.Digit<b.Digit);
}
void Solve(short i,short j)
{
fprintf(OUT,"%c",d[i][j].Digit);
if(d[i][j].to!=make_pair(0,0))
if(d[i][j].L>1)
Stack[++S]=
}
int main()
{
IN=fopen("elimin2.in","r");
OUT=fopen("elimin2.out","w");
fscanf(IN,"%s",str);
N=strlen(str);
for(int i=0;i<N;i++)
{
d[i][i].L=1;
d[i][i].Digit=str[i];
d[i][i].to={0,0};
}
for(int D=1;D<N;D++)
for(int i=0;i<N-D;i++)
{
d[i][i+D]=d[i][i+D-1];
if(comp(d[i][i+D],d[i+1][i+D]))
d[i][i+D]=d[i+1][i+D];
if(str[i]==str[i+D])
{
dynamic t=d[i+1][i+D-1];
t.L+=2;
t.Digit=str[i];
if(i+1>i+D-1)
t.to={0,0};
else t.to={i+1,i+D-1};
if(comp(d[i][i+D],t))
d[i][i+D]=t;
}
}
Solve(0,N-1);
return 0;
}