Cod sursa(job #166583)

Utilizator andrei.12Andrei Parvu andrei.12 Data 28 martie 2008 09:10:56
Problema Garaj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

#define lg 100005

int n, m, nrmin, nr, i, rezultat;
struct camion{
	int c, t;
};
camion v[lg];

int check(int val){
	int i, t[lg] = {0};
 	unsigned int sm = 0;

	for (i = 1; i <= n; i ++){
		t[i] = v[i].c * (val / v[i].t);
		sm += t[i];
	}
	
	if (sm < m)
		return 0;

	sm = 0;
	sort(t+1, t+n+1);

	for (i = n; i; i --){
		sm += t[i];

		if (sm >= m)
			break;
	}

	nr = n-i+1;
	return 1;
}
int bs(){
	int li = 1, ls = 200000000, x, gs = 0;

	while (li <= ls){
		x = (li+ls) / 2;

		if (check(x)){
			gs = x, nrmin = nr;
			
			ls = x-1;
		}
		else
			li = x+1;
	}

	return gs;
}
int main()
{
	freopen("garaj.in", "rt", stdin);
	freopen("garaj.out", "wt", stdout);

	scanf("%d%d", &n, &m);
	for (i = 1; i <= n; i ++){
		scanf("%d%d", &v[i].c, &v[i].t);
		v[i].t *= 2;
	}

	rezultat = bs();
	
	printf("%d %d\n", rezultat, nrmin);

	return 0;
}