Cod sursa(job #336918)

Utilizator hadesgamesTache Alexandru hadesgames Data 1 august 2009 21:48:31
Problema Garaj Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <list>
#include <set>
#include <algorithm>
#include <utility>
#include <string>
#include <functional>
#include <sstream>
#include <fstream>
using namespace std;
#define FOR(i,a,b) for (i=(a);i<=(b);i++)
#define fori(it,v) for (it=(v).begin();it!=(v).end();it++)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(c) c.begin(),c.end()
#define pf push_front
#define popb pop_back
#define popf pop_front
typedef pair<int ,int> ii;
FILE *in,*out;
int m,camioane,c[100005],t[100005],n;
vector<long long >b;
bool ver(long long rez,bool fmm)
{
	long long sum=0,i;
	b.clear();
	b.reserve(n);
	FOR(i,1,n)
		b.pb(c[i]*(rez/t[i]));
	if (fmm)
	{
		sort(all(b));
		reverse(all(b));
	}
	camioane=0;
	FOR(i,0,n-1)
	{
		camioane++;
		sum+=b[i];
		if (sum>=m)
			break;
	}
	if (sum>=m)
		return true;
	return false;
}
int main()
{
	long long i,rez;
	in=fopen("garaj.in","r");
	out=fopen("garaj.out","w");
	fscanf(in,"%d%d",&n,&m);
	FOR(i,1,n)
	{
		fscanf(in,"%d%d",&c[i],&t[i]);
		t[i]*=2;
	}
	rez=0;
	for(i=1<<18;i;i>>=1)
	{
		rez+=i;
		if (ver(rez,0))
			rez-=i;
	}
	rez++;
	ver(rez,1);
	fprintf(out,"%lld %d\n",rez,camioane);
	fclose(in);
	fclose(out);
        return 0;
}