Cod sursa(job #951215)

Utilizator predatorGigi Valoare predator Data 19 mai 2013 19:16:20
Problema Garaj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<fstream>
#define NM 100100
using namespace std;
ifstream f("garaj.in");
ofstream g("garaj.out");
long long i,n,m,c[NM],h[NM],t[NM],ls,ld,mij,best,sol;
int check(int x);
void eliminate(int x);
int main ()
{
	f>>n>>m;
	for(i=1;i<=n;++i)
	{
		f>>c[i]>>t[i];
		t[i]*=2;
		if((m+c[i]-1)/c[i]*t[i]>ld)
			ld=(m+c[i]-1)/c[i]*t[i];
	}
	ls=1;
	while(ls<=ld)
	{
		mij=(ls+ld)>>1;
		if(check(mij))
		{
			best=mij;
			ld=mij-1;
		}
		else
			ls=mij+1;
	}
	eliminate(best);
	g<<best<<" "<<sol;
	return 0;
}
int check(int x)
{
	long long S=0;
	for(i=1;i<=n;++i)
		S+=x/t[i]*c[i];
	if(S>=m)
		return 1;
	return 0;
}
void eliminate(int x)
{
	long long S=0;
	sol=n;
	for(i=1;i<=n;++i)
	{
		h[i]=x/t[i]*c[i];
		S+=h[i];
	}
	sort(h+1,h+n+1);
	for(i=1;i<=n;++i)
	{
		if(S-h[i]>=m)
			S-=h[i],sol--;
		else
			break;
	}
}