Cod sursa(job #132784)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 6 februarie 2008 17:06:23
Problema Garaj Scor Ascuns
Compilator cpp Status done
Runda Marime 0.74 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

#define nmax 100111
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define mp make_pair
#define f first
#define s second
#define pt(i) (1<<(i))

int n,m,sol,C[nmax],T[nmax];

int MIN(int a,int b) { return a<b?a:b; }

int doit(int x)
{
	int aux=m,i;
	FOR(i,0,n)
		if((aux-=x/T[i]*C[i])<=0)
			return 1;
	return 0;
}

int main()
{
	freopen("garaj.in","r",stdin);
	freopen("garaj.out","w",stdout);
	int i,j=0;
	scanf("%d %d",&n,&m);
	FOR(i,0,n)
		scanf("%d %d",&C[i],&T[i]);
	for(i=30;i>=0;--i)
		if(!doit(sol+pt(i)))
			sol+=pt(i);
	printf("%d ",2*(sol+1));
	FOR(i,0,n)
		C[i]=(sol+1)/T[i]*C[i];
	sort(C,C+n);
	reverse(C,C+n);
	FOR(i,0,n)
		if((j+=C[i])>=m)
			break;
	printf("%d\n",i+1);
	return 0;
}