Cod sursa(job #810977)

Utilizator vendettaSalajan Razvan vendetta Data 11 noiembrie 2012 13:27:44
Problema Fabrica Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <set>
#include <queue>
#include <deque>

using namespace std;

ifstream f("fabrica.in");
ofstream g("fabrica.out");

#define nmax 100005
#define ll long long
#define inf (1<<29)

int n, nrA, nrB;
//multiset< pair<int, pair<int, int> > > A;
multiset< pair<int,int> > B, A1, A2;


void citeste(){

	f >> n >> nrA >> nrB;

	for(int i=1; i<=nrA; ++i){
        int x;
        f >> x;
        A1.insert(make_pair( x, x ));
	}
	for(int i=1; i<=nrB; ++i){
        int x;
        f >> x;
        B.insert( make_pair(x,x) );
	}

}

void rezolva(){

    //ma folosesc de 2 seturi
     //fiecare doza de bere incerc s`o pun pe cel mai bun procesor
    int rez1 = 0; int rez2 = 0;

     for(int i=1; i<=n; ++i){
        int cat = (*A1.begin()).first;
        int cucat = (*A1.begin()).second;
        rez1 = max(cat, rez1);
        A1.erase(A1.begin());
        A1.insert( make_pair( cucat+cat, cucat) );
        //cout << cat + (cucat*ok) << " " << i << " " << ok <<  "\n";
        //cat = cat - cucat;
        int cat2 = (*B.begin()).first;//la cat se termina o bere la al 2 lea proces
        int cucat2 = (*B.begin()).second;//la cat o sa se termine urmatoare daca o sa mai efie evident;
        int bug = 0;
        int X = cat2 - cucat2;//la cat a inceput
        if (cat > X) bug = cat - X;//daca A-ul nu s-a terminat pana cand a inceput al 2 lea
        cat2 = cat2 + bug;//la cat se termina B-ul;
        B.erase(B.begin());
        rez2 = max(cat2, rez2);
        B.insert( make_pair( cat2+cucat, cucat ) );
     }

    cout <<rez1 << " " << rez2 << "\n";
    g <<rez1 << " " << rez2 << "\n";

}

int main(){

    citeste();
    rezolva();

    f.close();
    g.close();

    return 0;

}