Cod sursa(job #2402165)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 10 aprilie 2019 13:38:16
Problema Fabrica Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <fstream>
#include <queue>
#include <algorithm>
#define DIM 100002

using namespace std;

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

int n, nrA, nrB, maxA = -1, maxT = -1;
int A[DIM], B[DIM];
vector<int> solA, solB;

bool takenA, takenB;

struct bere{
    int t;//0 - A, 1 - B
    int index;
   
};

class cmp{
public:
    bool operator() (bere a, bere b){
        if(a.t == b.t)
            return a.index > b.index;
        return a.t > b.t;
    }
};

priority_queue<bere, vector<bere>, cmp> hA, hB;
queue<int> freeA, freeB;

bool cmp(int a, int b){
    return a > b;
}

int main(int argc, const char * argv[]) {
    
    in>>n>>nrA>>nrB;
    for(int i = 1; i <= nrA; ++ i){
        in>>A[i];
    }
    sort(A + 1, A + nrA + 1);
    for(int i = 1; i <= nrB; ++ i){
        in>>B[i];
    }
    sort(B + 1, B + nrB + 1);
    
    for(int i = 1; i <= nrA; ++ i){
        hA.push({A[i], i});
    }
    for(int i = 1; i <= nrB; ++ i){
        hB.push({B[i], i});
    }
    
    int globalTime = 0;
    
    for(int i = 1; i <= n; ++ i){
        solA.push_back(hA.top().t);
        maxA = max(maxA, hA.top().t);
        hA.push({hA.top().t + A[hA.top().index], hA.top().index});
        hA.pop();
    }
    
    for(int i = 1; i <= n; ++ i){
        solB.push_back(hB.top().t);
        hB.push({hB.top().t + B[hB.top().index], hB.top().index});
        hB.pop();
    }
    
    sort(solA.begin(), solA.end());
    sort(solB.begin(), solB.end(), cmp);
    
    for(int i = 0; i < solA.size(); ++ i){
        maxT = max(maxT, solB[i] + solA[i]);
    }
    
    
    
    out<<maxA<<" "<<maxT;
    
    return 0;
}