Cod sursa(job #304137)

Utilizator pedobearBacauanu Vlad pedobear Data 11 aprilie 2009 00:10:33
Problema Garaj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

int p[100010],cap[100010],timp[100010];
int i,n,m,sol,s;

int cmp(int i, int j)
{
	return (timp[i]<timp[j] || ( timp[i]==timp[j] && cap[i]<cap[j] ) );
}

void  cbin(int st, int dr)
{
	int mid,suma;
	while (st<=dr){ 
		mid=(st+dr)/2;
		suma=0;
		for (i=1;i<=n;i++)
			suma += mid/timp[i] * cap[i];
		if (suma>=m){
			sol=mid;
			dr=mid-1;
		}
		else st=mid+1;
	}
}

int main ()
{
	freopen ("garaj.in","r",stdin);
	freopen ("garaj.out","w",stdout);
	
	scanf ("%d %d",&n,&m);
	for (i=1;i<=n;i++) scanf ("%d %d",&cap[i],&timp[i]);
	for (i=1;i<=n;i++) p[i]=i;
	sort (p+1,p+n+1,cmp);
	
	cbin (1, 400000000);
	printf ("%d ",2*sol);
	
	for (i=1;i<=n;i++){
		s += sol/timp[p[i]] * cap[p[i]];
		if (s>=m) break;
	}
	printf ("%d\n",i);
	
	return 0;
}