Cod sursa(job #1111815)

Utilizator ChallengeMurtaza Alexandru Challenge Data 19 februarie 2014 09:57:23
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <algorithm>

using namespace std;

const char InFile[]="garaj.in";
const char OutFile[]="garaj.out";
const int MaxN=100111;

ifstream fin(InFile);
ofstream fout(OutFile);

struct camion
{
	int T,C;
};

int N,M,C[MaxN];
camion V[MaxN];

inline bool solve(long long t)
{
	int val=M;
	for(register int i=1;i<=N;++i)
	{
		val-=(t/(2*V[i].T))*V[i].C;
		if(val<=0)
		{
			return true;
		}
	}
	return false;
}

int main()
{
	fin>>N>>M;
	for(register int i=1;i<=N;++i)
	{
		fin>>V[i].C>>V[i].T;
	}
	fin.close();
	
	int st=0,dr=2000111000;
	int sol=2000111000;
	while(st<=dr)
	{
		int mij=(st+dr)>>1;
		if(solve(mij))
		{
			dr=mij-1;
			sol=mij;
		}
		else
		{
			st=mij+1;
		}
	}
	
	int sol2=0;
	for(register int i=1;i<=N;++i)
	{
		C[i]=(sol/(V[i].T*2))*V[i].C;
	}
	
	sort(C+1,C+1+N);
	
	int S=0;
	for(register int i=N;i>=1;--i)
	{
		if(M<=S)
		{
			break;
		}
		S+=C[i];
		++sol2;
	}
	
	fout<<sol<<" "<<sol2;
	fout.close();
	return 0;
}