Pagini recente » Cod sursa (job #2407306) | Cod sursa (job #1819848) | Cod sursa (job #3211379) | Cod sursa (job #1396132) | Cod sursa (job #588417)
Cod sursa(job #588417)
#include <cstdio>
#include <set>
using namespace std;
#define ll long long
#define nmax 100010
int n, nra, nrb, nr, sol, a[nmax], vc[nmax], vd[nmax];
multiset<int> c, d;
int verif(int x)
{
int i, c=0;
for (i=1; i<=nr; i++)
c+=x/a[i];
return c>=n;
}
int search(ll st, ll dr)
{
ll m, r;
while (st<dr)
{
m=(st+dr)/2;
if (verif(m))
{
r=m;
dr=m-1;
} else st=m+1;
}
return r;
}
int main()
{
freopen("fabrica.in","r",stdin);
freopen("fabrica.out","w",stdout);
scanf("%d %d %d", &n, &nra, &nrb);
nr=nra;
ll f, s;
int i, j, l;
ll vmax=((1<<30)-1)*2+1;
f=vmax;
for (i=1; i<=nr; i++)
{
scanf("%d", &a[i]);
if (a[i]<f) f=a[i];
}
s=f*n;
int x=search(1, s);
printf("%d ",x);
l=0;
for (i=1; i<=nr; i++)
for (j=a[i]; j<=x; j+=a[i]) c.insert(j);
nr=nrb;
f=vmax;
for (i=1; i<=nr; i++)
{
scanf("%d", &a[i]);
if (a[i]<f) f=a[i];
}
s=f*n;
x=search(1, s);
l=0;
for (i=1; i<=nr; i++)
for (j=a[i]; j<=x; j+=a[i]) d.insert(j);
for (i=1; i<=n; i++)
{
vd[i]=*d.begin();
d.erase(d.begin());
vc[i]=*c.begin();
c.erase(c.begin());
}
for (i=1; i<=n; i++)
sol=max(vc[i]+vd[n-i+1], sol);
printf("%d\n",sol);
}