Cod sursa(job #137314)

Utilizator swift90Ionut Bogdanescu swift90 Data 17 februarie 2008 11:11:12
Problema Garaj Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 9-a Marime 0.8 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
pair <int,int> nr[100100];
long long cant;
int timp(int n,int m,int tmp){
	cant=0;
	int i;
	for(i=0;i<n && cant<m;++i)
		cant+=(tmp/(2*nr[i].first))*((long long)nr[i].second);
	if(cant>=m)
		return 1;
	return 0;
}
int main(){
	freopen("garaj.in","r",stdin);
	freopen("garaj.out","w",stdout);
	int n,m,i,sum;
	long long p,u,mij;
	
	scanf("%d%d",&n,&m);
	for(i=0;i<n;++i)
		scanf("%d%d",&nr[i].second,&nr[i].first);
	sort(nr,nr+n);
	p=0;
	u=1<<42;
	while(p!=u){
		mij=(p+u)>>1;
		if(timp(n,m,mij))
			u=mij;
		else
			p=mij+1;
	}
	cant=0;
	sum=0;
	for(i=0;cant<m && i<n;++i){
		++sum;
		cant+=(p/(2*nr[i].first))*((long long)nr[i].second);
	}
	
	printf("%lld %d\n",p,sum);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}