Cod sursa(job #37702)

Utilizator andrei_h5n1Haidau Andrei andrei_h5n1 Data 25 martie 2007 12:05:14
Problema Elimin 2 Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 10-a Marime 1.01 kb
#include <fstream>
#include <string.h>

using namespace std;

ifstream fin("elimin2.in");
ofstream fout("elimin2.out");

int lung, st, dr, k1, maxi, imp, pus;
char s[100], b[100], a[100];

void back(int , int , int);
int main()
{
	fin.getline(s, 2001);
	lung=strlen(s);
	back(0, 0, lung);
	fout<<a;
	if(imp)
		for(int i=k1-2; i>=0; i--)
			fout<<a[i];
	else
		for(int i=k1-1; i>=0; i--)
			fout<<a[i];
	return 0;
}
void back(int k, int st, int dr)
{
	for(int i=st; i<=dr; i++)
	{
		if((k==0 && s[i]!='0') || k>0)
		for(int j=dr-1; j>=i; j--)
		{
			if(s[j]==s[i] && i!=j)
			{
				maxi=0;
				b[k]=s[i];
				back(k+1, i+1, j);
				b[k]=0;
				break;
			}
			else if(s[j]-'0'>maxi)
				maxi=s[j]-'0';
		}
	}
	if(maxi)
	{
		b[k]=maxi+'0';
		pus=1;
	}
	else
		pus=0;
	if((strcmp(b, a)>0 && b[0]!='0'&& strlen(b)==strlen(a)) || k>=k1)
	{
		strcpy(a, b);
		k1=k;
		imp=0;
		if(pus)
		{
			imp=1;
			k1++;
			b[k]=0;
		}
		maxi=0;
		k=0;
	}
	else if(pus)
		b[k]=0;
}