Cod sursa(job #2910322)

Utilizator euyoTukanul euyo Data 19 iunie 2022 13:57:14
Problema Garaj Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;

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

const int DIM = 100005;

using ll = long long;

struct trk {
  int cp, t;
} v[DIM];

int n, m;

ll getMax( ll at ) {
  ll s = 0;
  for ( int i = 1; i <= n && s < m; ++i ) {
    s += at / v[i].t * v[i].cp;
  }
  return s;
}

int main() {
  fin >> n >> m;
  ll lim = 0;
  for ( int i = 1; i <= n; ++i ) {
	fin >> v[i].cp >> v[i].t;
	v[i].t *= 2;
	lim = max( (ll)m / v[i].cp * v[i].t, lim );
  }
  ll l = 0, r = lim;
  while ( r - l > 1 ) {
	ll mid = (l + r) / 2;
	if ( getMax(mid) < m ) {
	  l = mid;
	} else {
	  r = mid;
	}
  }
  vector<ll> q;
  for ( int i = 1; i <= n; ++i ) {
	q.push_back(r / v[i].t * v[i].cp);
  }
  sort(q.begin(), q.end());
  int cnt = 0;
  ll s = 0;
  for ( int i = q.size() - 1; i >= 0 && s < m; --i ) {
	s += q[i];
	++cnt;
  }
  fout << r << " " << cnt;
  fin.close();
  fout.close();
  return 0;
}