Cod sursa(job #588413)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 7 mai 2011 21:56:08
Problema Fabrica Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <algorithm>
using namespace std;
#define ll long long
#define nmax 200010

int n, nra, nrb, nr, a[nmax], c[nmax], d[nmax];
ll sol;

int verif(int x)
{
	int i, c=0;
	for (i=1; i<=nr; i++) 
		c+=x/a[i];
	return c>=n;
}

ll 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;
	f=0;
	for (i=1; i<=nr; i++) 
	{
		scanf("%d", &a[i]);
		if (a[i]>f) f=a[i];
	}
	s=f*n;
	ll x=search(1, s);
	printf("%lld ",x);
	l=0;
	for (i=1; i<=nr; i++) 
		for (j=a[i]; j<=x; j+=a[i]) c[++l]=j;
	sort(c+1, c+l+1);
	nr=nrb;
	f=0;
	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(d+1, d+l+1);
	for (i=1; i<=n; i++)
		if (c[i]+d[n-i+1]>sol) sol=c[i]+d[n-i+1];
	printf("%lld\n",sol);
}