Cod sursa(job #337114)

Utilizator Mishu91Andrei Misarca Mishu91 Data 2 august 2009 16:58:29
Problema Garaj Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <algorithm>

using namespace std;

#define MAX_N 100005

ifstream fin ("garaj.in");
ofstream fout("garaj.out");

const int Tmax = 6000;

struct gar
{
	int c, t, g;
} V[MAX_N];
int N, K, logT;

struct cmp
{
	bool operator()(const gar &a, const gar &b) const
	{
		return a.g > b.g;
	}
};

void citire()
{
	fin >> N >> K;

	for(int i = 1; i <= N; ++i)
	{
		fin >> V[i].c >> V[i].t;
		V[i].t <<= 1;
	}
	
	for(logT = 1; logT <= Tmax; logT <<= 1);
}

int search(int k)
{
	for(int i = 1; i <= N; ++i)
		V[i].g = k/V[i].t*V[i].c;
	
	sort(V+1, V+N+1, cmp());
	
	int cap = 0;
	for(int i = 1; i <= N; ++i)
		if((cap += V[i].g) >= K)
			return i;
	
	return 0;
}

void solve()
{
	int i, lg;
	
	for(i = Tmax, lg = logT; lg; lg >>= 1)
		if(i - lg > 0 && search(i - lg))
			i -= lg;
		
	fout << i << " " << search(i) << "\n";
}

int main()
{
	citire();
	solve();
}