Cod sursa(job #388613)

Utilizator ProtomanAndrei Purice Protoman Data 30 ianuarie 2010 15:30:06
Problema Garaj Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <algorithm>
#include <stdio.h>
#include <vector>

#define MAX 100010
#define ll long long
#define pb push_back

using namespace std;

int n;
ll m, minT;
int c[MAX], t[MAX];
vector <ll> vctPos;

inline int test(ll x)
{
	ll st = m;
	for (int i = 1; i <= n; i++)
		st -= ((ll) (x / (2 * t[i])) * c[i]);

	if (st <= 0)
		return 1;
	return 0;
}

inline void cautaBin(ll st, ll dr)
{
	if (st > dr)
		return;

	ll med = (st + dr) / 2;

	if (test(med))
	{
		minT = med;

		cautaBin(st, med - 1);
	}
	else cautaBin(med + 1, dr);
}

int main()
{
	freopen("garaj.in", "r", stdin);
	freopen("garaj.out", "w", stdout);
	
	scanf("%d %lld", &n, &m);

	for (int i = 1; i <= n; i++)
		scanf("%d %d", &c[i], &t[i]);

	cautaBin(0, m * 2000);

	for (int i = 1; i <= n; i++)
		vctPos.pb(c[i] * (ll) (minT / (2 * t[i])));

	sort(vctPos.begin(), vctPos.end());
	reverse(vctPos.begin(), vctPos.end());

	int fol = 0;
	for (; fol < n && m > 0; fol++)
		m -= vctPos[fol];

	printf("%lld %d\n", minT, fol);

	fclose(stdin);
	fclose(stdout);
	return 0;
}