Cod sursa(job #810798)

Utilizator vendettaSalajan Razvan vendetta Data 11 noiembrie 2012 00:27:02
Problema Fabrica Scor 0
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

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


void citeste(){

	f >> n >> nrA >> nrB;

	for(int i=1; i<=nrA; ++i){
        int x;
        f >> x;
        A.insert(make_pair( x, make_pair(x,0) ));
	}
	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 = (*A.begin()).first;
        int cucat = (*A.begin()).second.first;
        int X = (*A.begin()).second.second;
        A.erase(A.begin());
        A.insert( make_pair(cat+(cucat*X), make_pair(cucat, X+1) )  );
        rez1 = max(rez1, cat+(cucat*X));
/*
        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;

}