Pagini recente » Cod sursa (job #2882768) | Cod sursa (job #1660885) | Cod sursa (job #2855368) | Cod sursa (job #1614317) | Cod sursa (job #587803)
Cod sursa(job #587803)
# include <fstream>
# include <iostream>
# include <algorithm>
# include <set>
# define DIM 50003
# define mp make_pair
# define fs first
# define sc second
using namespace std;
unsigned int n, na, nb, a[DIM], b[DIM], r1, r2, v[2*DIM], w[2*DIM];
multiset< pair <unsigned int,unsigned int> >S;
void solve (unsigned int v[], unsigned int a[], unsigned int na)
{
unsigned int nr=0, p=1, tmp, d, i, t;
for(;p<=na && a[p]==a[1];++p)
{
v[++nr]=a[p];
S.insert(mp(2*a[p], a[p]));
}
t=a[1];
while (nr<n)
{
t=S.begin()->fs;
while (S.size() && (S.begin())->fs<=t)
{
tmp=(S.begin())->fs;
d=(S.begin())->sc;
S.erase(S.begin());
S.insert(mp(tmp+d, d));
v[++nr]=tmp;
}
for(;p<=na && a[p]<=t;++p)
{
S.insert(mp(2*a[p],a[p]));
v[++nr]=a[p];
}
}
S.erase(S.begin(),S.end());
}
int main ()
{
ifstream fin ("fabrica.in");
ofstream fout ("fabrica.out");
fin>>n>>na>>nb;
for(int i=1;i<=na;++i)fin>>a[i];
for(int i=1;i<=nb;++i)fin>>b[i];
sort(a+1, a+na+1);
sort(b+1, b+nb+1);
solve (v, a, na);
solve (w, b, nb);
for(int i=1;i<=n;++i)
r2=max(r2,v[i]+w[n-i+1]);
fout<<v[n]<<" "<<r2;
return 0;
}