Pagini recente » Cod sursa (job #2669735) | Cod sursa (job #3223627) | Cod sursa (job #1107771) | Cod sursa (job #1608549) | Cod sursa (job #2910326)
#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;
}