Cod sursa(job #1113490)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 20 februarie 2014 17:26:27
Problema Garaj Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>
#include<algorithm>

using namespace std;

#define max_n 100010

ifstream f("garaj.in");
ofstream g("garaj.out");

int n , m , st , dr , mid , i , t_min;
int T[max_n] , C[max_n] , V[max_n];

void read(){
	f>>n>>m;
	
	for( int i = 1 ; i <= n ; i++ )
		f>>C[i]>>T[i];
}

bool pos( int t ){
	
	int S = 0;
	
	for( int i = 1 ; i <= n ; i++ ){
		S += (t / (2*T[i])) * C[i];
		if( S >= m )
			return 1;
	}
	return 0;
}

bool cmp( int a , int b ){
	return a > b;
}

int main(){
	
	read();
	
	st = 1; dr = (m / C[1] + 1) * 2 * T[1];
	mid = (st + dr) / 2;
	
	while( st <= dr ){
		if( pos(mid) ){
			t_min = mid;
			dr = mid - 1;
		}
		else
			st = mid + 1;
		mid = (st + dr) / 2;
	}
	
	for( int i = 1 ; i <= n ; i++ ){
		V[i] = (t_min / (2*T[i])) * C[i];
	}
	
	sort(V + 1 , V + n + 1 , cmp);
	
	int s = 0 , i = 1;
	
	while( s < m ){
		s += V[i];
		i++;
	}
	
	g<<t_min<<" "<<i-1;
	
	return 0;
}