Cod sursa(job #1120237)

Utilizator loginLogin Iustin Anca login Data 24 februarie 2014 22:22:59
Problema Garaj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
# include <fstream>
# include <iostream>
# include <algorithm>
# include <vector>
# define DIM 100003
# define MAX 2000000000000ll
# define ll long long
# define pb push_back
# define mp make_pair
# define fs first
# define sc second
using namespace std;
int n, m;
ll T=MAX, N;
vector< pair<int,int> >V;

void read ()
{
	ifstream fin ("garaj.in");
	fin>>n>>m;
	for(int i=1;i<=n;++i) {
		int x, y;
		fin>>x>>y;
		V.pb(mp(y, x));
	}
}

bool inline cmp(pair<int,int>a, pair<int,int>b)
{
	if (a.fs<b.fs)return -1;
	if (a.fs == b.fs && a.sc>b.sc)return -1;
	if (a.fs == b.fs && a.sc==b.sc)return 0;
	return 1;
}

void solve ()
{
	ll c;
	sort(V.begin(),V.end(), cmp);
	for(ll st = 1, dr = MAX, mij = (st+dr)>>1;st<=dr;mij=(st+dr)>>1) {
		c=0;
		for(int i=0;i<n && mij>=V[i].fs*2;++i)
			c+=(ll)mij/V[i].fs/2*V[i].sc;
		if (c>=m) {
			dr = mij-1,
			T=mij;
		} else {
			st = mij+1;
		}
	}
		
	c=0;
	for(N=0;N<n && c<m && T >= V[N].fs*2;++N) {
		c+=(ll)T/V[N].fs/2*V[N].sc;
	}
}

int main()
{
	read();
	solve();
	
	ofstream fout ("garaj.out");
	fout<<T<<" "<<N;
	
	return 0;
}