Pagini recente » Cod sursa (job #2871514) | Cod sursa (job #2336058) | Cod sursa (job #2816754) | Cod sursa (job #2474539) | Cod sursa (job #588412)
Cod sursa(job #588412)
#include <cstdio>
#include <algorithm>
using namespace std;
#define ll long long
#define nmax 100010
int n, nra, nrb, nr, sol, a[nmax], c[nmax], d[nmax];
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=0;
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[++l]=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[++l]=j;
sort(c+1, c+n+1);
sort(d+1, d+n+1);
for (i=1; i<=n; i++)
if (c[i]+d[n-i+1]>sol) sol=c[i]+d[n-i+1];
printf("%d\n",sol);
}