Pagini recente » Cod sursa (job #2281480) | Cod sursa (job #1130016) | Cod sursa (job #1666680) | Cod sursa (job #1366955) | Cod sursa (job #810977)
Cod sursa(job #810977)
#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
#define inf (1<<29)
int n, nrA, nrB;
//multiset< pair<int, pair<int, int> > > A;
multiset< pair<int,int> > B, A1, A2;
void citeste(){
f >> n >> nrA >> nrB;
for(int i=1; i<=nrA; ++i){
int x;
f >> x;
A1.insert(make_pair( x, x ));
}
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 = (*A1.begin()).first;
int cucat = (*A1.begin()).second;
rez1 = max(cat, rez1);
A1.erase(A1.begin());
A1.insert( make_pair( cucat+cat, cucat) );
//cout << cat + (cucat*ok) << " " << i << " " << ok << "\n";
//cat = cat - cucat;
int cat2 = (*B.begin()).first;//la cat se termina o bere la al 2 lea proces
int cucat2 = (*B.begin()).second;//la cat o sa se termine urmatoare daca o sa mai efie evident;
int bug = 0;
int X = cat2 - cucat2;//la cat a inceput
if (cat > X) bug = cat - X;//daca A-ul nu s-a terminat pana cand a inceput al 2 lea
cat2 = cat2 + bug;//la cat se termina B-ul;
B.erase(B.begin());
rez2 = max(cat2, rez2);
B.insert( make_pair( cat2+cucat, cucat ) );
}
cout <<rez1 << " " << rez2 << "\n";
g <<rez1 << " " << rez2 << "\n";
}
int main(){
citeste();
rezolva();
f.close();
g.close();
return 0;
}