Cod sursa(job #585798)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 30 aprilie 2011 11:54:35
Problema Fabrica Scor 10
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 10-12 Marime 1.37 kb
#include <algorithm>
#include <fstream>

using namespace std;

const int Dim = 100001;
const int Inf = 0x3f3f3f3f;

int N, Na, Nb;
int texa[Dim >> 1], texb[Dim >> 1], tfa[Dim >> 1], tfb[Dim >> 1], tf[Dim];

int main() {

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

    int i, j, id, mx, mn;

    fin >> N;
    fin >> Na, fin >> Nb;
    for( i = 1; i <= Na; ++i )
        fin >> texa[i];
    for( i = 1; i <= Nb; ++i )
        fin >> texb[i];

    for( i = 1; i <= N; ++i ) {

        mn = Inf;
        id = 0;
        for( j = 1; j <= Na; ++j )
            if( tfa[j] + texa[j] < mn ) {

                mn = tfa[j] + texa[j];
                id = j;
            }
        tf[i] = tfa[id] = mn;
    }
    mx = -Inf;
    for( i = 1; i <= Na; ++i )
        mx = max( mx, tfa[i] );

    //prima cerinta
    fout << mx << " ";

    sort( tf + 1, tf + N + 1 );
    for( i = 1; i <= N; ++i ) {

        mn = Inf;
        id = 0;
        for( j = 1; j <= Nb; ++j )
            if( max( tf[i], tfb[j] ) + texb[j] < mn ) {

                mn = max( tf[i], tfb[j] ) + texb[j];
                id = j;
            }
        tfb[id] = mn;
    }
    mx = -Inf;
    for( i = 1; i <= Nb; ++i )
        mx = max( mx, tfb[i] );

    //a doua cerinta
    fout << mx;

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

    return 0;
}