Cod sursa(job #951224)

Utilizator predatorGigi Valoare predator Data 19 mai 2013 19:22:59
Problema Garaj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<cstdio>
#define NM 100100
#include<algorithm>
using namespace std;
FILE *f=fopen("garaj.in","r");
FILE *g=fopen("garaj.out","w");
int i,n,m,c[NM],t[NM],mij,ls,ld,best,sol;
long long h[NM];
int check(long long x);
void eliminate(long long x);
int main ()
{
	fscanf(f,"%lld%lld",&n,&m);
	ld=m;
	for(i=1;i<=n;++i)
	{
		fscanf(f,"%lld%lld",&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);
	fprintf(g,"%lld %lld",best,sol);
	return 0;
}
int check(long long 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(long long 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;
	}
}