Pagini recente » Cod sursa (job #2286817) | Cod sursa (job #2278037) | Cod sursa (job #2947883) | Cod sursa (job #1587539) | Cod sursa (job #2910321)
#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;
for ( int i = 1; i <= n; ++i ) {
fin >> v[i].cp >> v[i].t;
v[i].t *= 2;
}
ll l = 0, r = 1e9;
while ( r - l > 1 ) {
ll mid = (l + r) / 2;
if ( getMax(mid) < m ) {
l = mid;
} else {
r = mid;
}
}
vector<int> 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, 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;
}