Cod sursa(job #982064)

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

using namespace std;

struct camion {
	int c,t;
};

camion cam[100010];
int sol;

int compar (const void *p, const void *q)
{
	camion x=*(camion*)p,y=*(camion*)q;
	if((sol/x.t)*x.c<(sol/y.t)*y.c)
		return 1;
    if(((sol/x.t)*x.c)>(sol/y.t)*y.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;
	qsort(cam+1,n,sizeof(cam[0]),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;
}