Cod sursa(job #940814)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 17 aprilie 2013 09:21:37
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
#include<algorithm>

#define maxdim 100005

using namespace std;

FILE*f=fopen("garaj.in","r");
FILE*g=fopen("garaj.out","w");

int n,m;
int c[maxdim];
pair<int,int>C[maxdim];

inline bool check ( const int &tmax ){
	
	int r = m;
	for ( int i = 1 ; i <= n ; ++i ){
		r -= (tmax/(C[i].second<<1))*C[i].first;
		if ( r <= 0 )	return 1;
	}
	return 0;
}

int main () {
	
	fscanf(f,"%d %d",&n,&m);
	for ( int i = 1 ; i <= n ; ++i ){
		fscanf(f,"%d %d",&C[i].first,&C[i].second);
	}
	
	int left = 1 , middle , right = 2*m;
	while ( left <= right ){
		middle = left + (right-left)/2;
		
		if ( check(middle) ){
			right = middle-1;
		}
		else{
			left = middle+1;
		}
	}
	int tmin = left;
	
	for ( int i = 1 ; i <= n ; ++i ){
		c[i] = (tmin/(C[i].second<<1))*C[i].first;
	}
	sort(c+1,c+n+1);
	
	int nrc = 0;
	for ( int i = n ; i >= 1 ; --i ){
		m -= c[i];
		++nrc;
		if ( m <= 0 )	break ;
	}
	
	fprintf(g,"%d %d\n",tmin,nrc);
	
	fclose(f);
	fclose(g);
	
	return 0;
}