Pagini recente » Cod sursa (job #1659918) | Cod sursa (job #2345970) | Cod sursa (job #923979) | Cod sursa (job #2340591) | Cod sursa (job #585784)
Cod sursa(job #585784)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <set>
using namespace std;
#define maxn 100010
#define maxp 50010
#define inf 99999999
int N, A, B;
int tminA = 0, tminB = 0;
int tA[maxp], tB[maxp];
vector<int> times;
multiset<pair<int, int> > dupaA;
multiset<pair<int, int> > dupaB;
int cmp(int a, int b) {
return a > b;
}
int main() {
FILE *f1=fopen("fabrica.in", "r"), *f2=fopen("fabrica.out", "w");
int i, j, p, q;
fscanf(f1, "%d %d %d\n", &N, &A, &B);
for(i=1; i<=A; i++) {
fscanf(f1, "%d\n", &tA[i]);
dupaA.insert( make_pair(0 + tA[i], tA[i]) );
}
for(i=1; i<=B; i++) {
fscanf(f1, "%d\n", &tB[i]);
dupaB.insert( make_pair(0 + tB[i], tB[i] ) );
}
int pas = N;
while(pas) {
multiset<pair<int, int> >::iterator it;
it = dupaA.begin();
int sum = (*it).first;
int durata = (*it).second;
times.push_back(sum);
tminA = max(tminA, sum);
dupaA.erase(it);
dupaA.insert( make_pair(sum + durata, durata) );
pas --;
}
fprintf(f2, "%d ", tminA);
sort(times.begin(), times.end(), cmp);
for(i=0; i<times.size(); i++) {
cout<<times[i]<<" ";
} cout<<endl;
pas = 0;
while(pas < N) {
multiset<pair<int, int> >::iterator it;
it = dupaB.begin();
int sum = (*it).first;
int durata = (*it).second;
int momliber = sum - durata;
dupaB.erase(it);
if(momliber <= times[pas]) {
tminB = max(tminB, times[pas] + durata);
dupaB.insert( make_pair(times[pas] + durata + durata, durata) );
}
else {
tminB = max(tminB, momliber + durata);
dupaB.insert( make_pair(momliber + durata + durata, durata) );
}
pas ++;
}
fprintf(f2, "%d\n", tminB);
fclose(f1); fclose(f2);
return 0;
}