Cod sursa(job #137431)

Utilizator za_wolfpalianos cristian za_wolf Data 17 februarie 2008 12:07:54
Problema Garaj Scor 10
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 10-a Marime 1.12 kb
#include<stdio.h>
#include<algorithm>
#define NMAX 101
using namespace std;
long a,x[NMAX],y[NMAX],n,k,i,in,sf,q,m;
struct kkt
{
	long X,Y;
};
kkt qq[NMAX];
int cmpf(const kkt a,const kkt b)
{
	return ((a.X/a.Y)>(b.X/b.Y));
}
int main()
{
	freopen("garaj.in","r",stdin);
	freopen("garaj.out","w",stdout);
	scanf("%ld%ld",&n,&k);
	for (i=1;i<=n;i++)
	{
		scanf("%ld%ld",&x[i],&y[i]);
		y[i]=y[i]*2;
		qq[i].X=x[i];
		qq[i].Y=y[i];
	}

	in=1;
	sf=k;
	y[n+1]=m+1;
	x[n+1]=0;
	while (in<sf)
	{
		m=(in+sf)/2;
		q=0;
		for (i=1;i<=n+1&&q<k;i++)
			q+=(m/y[i])*x[i];
		if (i<=n+1)
			sf=m;
		else
			in=m+1;
	}
	if (in==sf) m=in;
	printf("%ld ",m);
	a=1;
/*	while (a)
	{
		a=0;
		for (i=1;i<n;i++)
			if (((float)x[i]/y[i])<((float)x[i+1]/y[i+1]))
			{
				a=x[i];
				x[i]=x[i+1];
				x[i+1]=a;
				a=y[i];
				y[i]=y[i+1];
				y[i+1]=a;
				a=1;
			}
	}    */
	a=0;
	sort(qq+1,qq+n+1,cmpf);
	for (i=1;i<=n;i++)
	{
		x[i]=qq[i].X;
		y[i]=qq[i].Y;
	}
	q=0;
	for (i=1;i<=n;i++)
	{
		q+=(m/y[i])*x[i];
		if (q>=k)
		{
			a=i;
			i=n;
		}
	}
	printf("%ld\n",a);

	return 0;
}