Pagini recente » Cod sursa (job #3190541) | Cod sursa (job #2450916) | Cod sursa (job #1656493) | Cod sursa (job #1660942) | Cod sursa (job #134702)
Cod sursa(job #134702)
#include <stdio.h>
#include <string.h>
#define x F[l+1][i]
#define y B[l+1][i]
int A[2003][2003][2],F[2003][10],B[2003][10],n;
char s[2003];
void ReadData ()
{
freopen ( "elimin2.in" , "r" , stdin );
fgets ( s , 2003 , stdin );
s[strlen(s)-1]=0;
}
void CountNumbers ( int l , int r )
{
int i;
if (l==r) A[l][r][0]=1,A[l][r][1]=s[l]-'0'; else
for ( i=0 ; i<=9 ; i++ ) {
if (x>=y , y<r ) {
if (!A[x][y][0]) CountNumbers ( x , y );
if (A[x][y][0]>=A[l][r][0]-2)
A[l][r][0]=A[x][y][0]+ (y<r)?(2):(1),A[l][r][1]=s[l]-'0';
}
}
}
void Solve ()
{
int l,r,i;
l=0;r=strlen(s)-1;
for ( i=1 ; i<=9 ; i++ ) {
if (x<=y && y<=r) {
if (!A[x][y]) CountNumbers ( x , y );
if (A[x][y][0]>=A[l][r][0]-(y<r)?(2):(1))
A[l][r][0]=A[x][y][0]+ (y<r)?(2):(1),A[l][r][1]=s[l]-'0';
}
}
}
void SetOrder ()
{
int i;
n=strlen(s);
for ( i=0; i<=9 ; i++ ) { B[0][i]=-1; F[n][i]=n; }
B[0][s[0]-'0']=0;
for ( i=1 ; i<n ; i++ ) {
memcpy ( B[i] , B[i-1] , 10*sizeof(int) );
B[i][s[i]-'0']=i;
}
for ( i=n-1; i+1 ; i-- ) {
memcpy ( F[i] , F[i+1] , 10*sizeof(int) );
F[i][s[i]-'0']=i;
}
}
int main ()
{
ReadData ();
SetOrder ();
Solve ();
return 0;
}