Pagini recente » Cod sursa (job #299970) | Cod sursa (job #1513738) | Cod sursa (job #182235) | Cod sursa (job #1875747) | Cod sursa (job #585840)
Cod sursa(job #585840)
#include <cstdio>
using namespace std;
FILE *f=fopen("fabrica.in", "r");
FILE *g=fopen("fabrica.out", "w");
int n, nra, nrb;
int va[50001], vb[50001];
int sola, solb;
inline void swape(int &a, int &b)
{
int h=a; a=b; b=h;
}
void read()
{
fscanf(f, "%d%d%d", &n, &nra, &nrb);
for (int i=1; i<=nra; ++i)
fscanf(f, "%d", &va[i]);
for (int j=1; j<=nrb; ++j)
fscanf(f, "%d", &vb[j]);
}
void quicksort(int lo, int hi, int a[])
{
int x=a[(lo+hi)/2];
int i=lo, j=hi;
do
{
while (a[i]<x) ++i;
while (a[j]>x) --j;
if (i<=j)
{
swape(a[i], a[j]);
++i; --j;
};
}while (i<=j);
if (i<hi) quicksort(i, hi, a);
if (j>lo) quicksort(lo, j, a);
}
int numar(int x)
{
int nr=0;
for (int i=1; i<=nra && x/va[i];++i)
{
nr+=x/va[i];
}
return nr;
}
void cautbin(unsigned int lo, unsigned int hi)
{
unsigned int x=(lo+hi)/2;
int cv1=numar(x);
if (cv1<n)
{
int cv2=numar(x+1);
if (cv2>=n)
sola=x+1;
else cautbin(x+1, hi);
}
else cautbin(lo, x);
}
int main()
{
read();
quicksort(1, nra, va);
quicksort(1, nrb, vb);
cautbin(1, va[1]*n);
fprintf(g, "%d %d", sola, solb);
fclose(f);
fclose(g);
return 0;
}