Cod sursa(job #466682)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 27 iunie 2010 13:07:26
Problema Prod Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 1.49 kb
#include <algorithm>
#include <cassert>
#include <cctype>
#include <cmath>
#include <cstring>
#include <ctime>
#include <bitset>
#include <deque>
#include <fstream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>

using namespace std;

typedef bool int01;
typedef char cha08;
typedef short int int16;
typedef int int32;
typedef float rea32;
typedef long long int int64;
typedef double rea64;

const cha08 Input[] = "prod.in";
const cha08 Output[] = "prod.out";

ifstream fin( Input );
ofstream fout( Output );

int32 f[10];
int64 A, B, AA, BB, XXX;

void Back( int32 k ) {

    if( k == 0 ) {

        if( A * B > XXX ) {

            XXX = A * B;
            AA = A;
            BB = B;
        }
//        fout << A << " " << B << "\n";
        return;
    }

    if( !f[k] ) {

        Back( k - 1 );
        return;
    }

    A = A * 10 + k;
    --f[k];
    Back( k );
    A /= 10;
    B = B * 10 + k;
    Back( k );
    B /= 10;
    ++f[k];
}

int32 main() {

    int32 i;

    for( i = 1; i <= 9; ++i )
        fin >> f[i];

    for( i = 9; i >= 1; --i )
        if( f[i] ) {

            A = i;
            --f[i];
            break;
        }
    for( i = 9; i >= 1; --i )
        if( f[i] ) {

            B = i;
            --f[i];
            break;
        }

    Back( 9 );

    fout << XXX;

    fin.close();
    fout.close();

    return 0;
}