Pagini recente » Cod sursa (job #1745063) | Cod sursa (job #1995709) | Cod sursa (job #1545517) | Cod sursa (job #1646500) | Cod sursa (job #2402140)
#include <fstream>
#include <queue>
#define DIM 1002
using namespace std;
ifstream in ("fabrica.in");
ofstream out("fabrica.out");
int n, nrA, nrB;
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];
freeA.push(i);
}
sort(A + 1, A + nrA + 1);
for(int i = 1; i <= nrB; ++ i){
in>>B[i];
freeB.push(i);
}
sort(B + 1, B + nrB + 1);
int T = 0;
int maxT = -1;
for(int i = 1; i <= n; ++ i){
if(!freeA.empty()){
hA.push({T + A[freeA.front()], freeA.front()});
freeA.pop();
}
else{
if(hA.top().t > T)
T = hA.top().t;
solA.push_back(T);
int index = hA.top().index;
hA.pop();
hA.push({T + A[index], index});
}
}
T = 0;
while(hA.empty() == 0){
solA.push_back(hA.top().t);
hA.pop();
}
for(int i = 1; i <= n; ++ i){
if(!freeB.empty()){
hB.push({T + B[freeB.front()], freeB.front()});
freeB.pop();
}
else{
if(hB.top().t > T)
T = hB.top().t;
solB.push_back(T);
int index = hB.top().index;
hB.pop();
hB.push({T + B[index], index});
}
}
while(hB.empty() == 0){
solB.push_back(hB.top().t);
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<<maxT;
return 0;
}