Cod sursa(job #2910326)

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

using namespace std;

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

const int DIM = 100005;

using ll = int;

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

int n, m;

int getNum() {
  int n = 0;
  char ch;
  while ( isspace( ch = fin.get() ) );
  do {
    n = n * 10 + ch - '0';
  } while ( isdigit( ch = fin.get() ) );
  return n;
}

int main() {
  n = getNum(), m = getNum();
  ll lim = 0;
  for ( int i = 1; i <= n; ++i ) {
	v[i].cp = getNum();
	v[i].t = getNum();
	v[i].t *= 2;
	lim = max( m / v[i].cp * v[i].t, lim );
  }
  ll l = 0, r = lim;
  while ( r - l > 1 ) {
	ll mid = (l + r) / 2;
    ll s = 0;
    for ( int i = 1; i <= n && s < m; ++i ) {
      s += mid / v[i].t * v[i].cp;
    }
	if ( s < 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;
}