Cod sursa(job #137308)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 17 februarie 2008 11:09:55
Problema Garaj Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 10-a Marime 1.01 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
const int n_max = 100002;
vector <long long > v;
int t[n_max], c[n_max];
long long MIN;
int i, n, m;
bool greedy(long long x)
{
	v.clear();
	long long trans;
	long long k;
	int i;
	k = m;
	for (i = 1; i <= n; ++ i)
	{
		trans = (x/(2*t[i]));
		v.push_back(trans*c[i]);
	}
	sort(v.begin(),v.end());
	for (i = n-1; k>0 &&  i>=0; -- i)
	{
		k-=v[i];
	}
	if (k >0)
		return false;
	else
	{
		MIN = (n-1)-i;
		return true;
	}
	
}
	
int binary_search()
{
	long long N=(long long)1<<60;
    long long i, step;
    for (step = 1; step < N; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step < N && !greedy(i+step))
           i += step;
    return i;
}

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", &c[i], &t[i]);
	}
	printf("%lld ",binary_search()+1);
	printf("%lld\n", MIN);
	return 0;
}