Cod sursa(job #982073)

Utilizator stefan.friptuPetru Stefan Friptu stefan.friptu Data 8 august 2013 13:55:09
Problema Garaj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <cstdlib>
#include <algorithm>

using namespace std;

struct camion {
	int c,t;
};

camion cam[100010];
int sol;

int compar (camion a, camion b)
{
	if((sol/a.t)*a.c<(sol/b.t)*b.c)
		return 1;
    if((sol/a.t)*a.c>(sol/b.t)*b.c)
		return -1;
	return 0;
}

int main()
{
	freopen("camion.in","r",stdin);
	freopen("camion.out","w",stdout);
	
	int n,m,a,b,i,st,dr,k,nr;
	
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++){
		scanf("%d%d",&a,&b);
		cam[i].c=a;
		cam[i].t=b*2;
	}
	
	st=1;
	dr=22500;
	
	while(st<=dr)
	{
		k=(st+dr)/2;
		nr=0;
		for(i=1;i<=n;i++)
			nr+=(k/cam[i].t)*cam[i].c;
		if(nr>=m)
		{
			sol=k;
			dr=k-1;
		}
		else
			st=k+1;
	}
	
	nr=0;
	sort(cam+1,cam+n+1,compar);
	
	for(i=1;i<=n && nr<m;i++)
		nr+=(sol/cam[i].t)*cam[i].c;    
	
	printf("%d %d\n",sol,i-1);
	
	return 0;
}