Cod sursa(job #314595)

Utilizator drag0s93Mandu Dragos drag0s93 Data 12 mai 2009 10:27:48
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<cstdio>
#include<algorithm>

using namespace std ; 

#define IN "garaj.in","r",stdin
#define OUT "garaj.out","w",stdout
#define ll long long
#define Pair pair<int,int>
#define x first
#define y second
int N, M ;
Pair V[100020];
int raport[100020];

int cmp(const int& a, const int& b)
{
	if (a > b)
		return 1;
	return 0;
}

int cec(int t)
{
	ll sum = 0;
	for(int i = 1; i <= N ; ++i)
		sum += (ll)V[i].x * (t / V[i].y);
	if(sum >= M)
		return 1;
	return 0;
}

int main()
{
	freopen(IN);
	freopen(OUT);
	scanf("%d%d",&N,&M);
	for(int i = 1 ; i <= N ; ++i)
	{
		scanf("%d%d",&V[i].x,&V[i].y);
		V[i].y *= 2;
	}
	int min = 2000000000;
	int st = 1 , dr = 2000000000, m ;
	while(st <= dr)
	{
		m = ((ll)st + dr) / 2;
//		printf("%d\n", m);
		if(cec(m) == 1)
		{
			dr = m - 1;
			min = m;
		}
		else 
			st = m + 1 ;
	}
	printf("%d ",min);
	
	int i;
	for (i = 1; i <= N; ++i)
		raport[i] = (ll)(min / V[i].y) * V[i].x;
	sort(raport + 1 , raport + 1 + N, cmp);
	int s = 0 , E = 1;
	while(s < M)
		s += raport[E++];
	printf("%d\n",E - 1);
	return 0;
}