Pagini recente » Cod sursa (job #2566834) | Cod sursa (job #589586) | Cod sursa (job #689437) | Cod sursa (job #2652346) | Cod sursa (job #2402165)
#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;
}