Cod sursa(job #810953)

Utilizator vendettaSalajan Razvan vendetta Data 11 noiembrie 2012 12:47:36
Problema Fabrica Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.32 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 = inf;
        int cucat = inf;
        int ok = 1;// nu intru in primul
        if (A1.size()){
            cat = (*A1.begin()).first;
            cucat = (*A1.begin()).second;
            //A1.erase(A1.begin());
            ok = 0;
        }
        if (A2.size()){
            if (cat > (*A2.begin()).first){
                cat = (*A2.begin()).first;
                cucat = (*A2.begin()).second;
                //A2.erase(A2.begin());
                ok = 1;
            }else{
                ok = 0;
            }
        }
        if (ok == 0) A1.erase(A1.begin());
                else A2.erase(A2.begin());
        A2.insert( make_pair(cat + cucat*ok, cucat ));
        rez1 = max(rez1, cat+(cucat*ok));
        //cout << cat + (cucat*ok) << " " << i << " " << ok <<  "\n";
/*
        if (i <= nrA) cat = cat + cucat;
                 else cat = (*A.begin()).first;
        int cat2 = (*B.begin()).first;
        int cucat2 = (*B.begin()).second;
        int bug = 0;//diferenta de asteptare in cazul in care primul proces se termina dupa al 2 lea
        if (cat > cat2) bug = cat - cat2;
        //cout << (*B.begin()).first << " "<< (*B.begin()).second << " " << bug << " " << i<< "\n";
        B.erase(B.begin());
        B.insert( make_pair(cat2+cucat2+bug, cucat2) );
        rez2 = max(rez2, cat2+cucat2+bug);
  */
     }

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

}

int main(){

    citeste();
    rezolva();

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

    return 0;

}