Pagini recente » Cod sursa (job #2025613) | Cod sursa (job #2490867) | Cod sursa (job #1977291) | Cod sursa (job #1013777) | Cod sursa (job #2975006)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define Nmax 100001
int n, m;
int c[Nmax], t[Nmax];
int main() {
freopen("garaj.in", "r", stdin);
freopen("garaj.out", "w", stdout);
cin >> n >> m;
for (int i = 0; i < n; ++i) {
cin >> c[i] >> t[i];
t[i] *= 2;
}
long long st = 0, dr = (long long)m * t[0];
while (st < dr) {
int mid = (st + dr) >> 1;
int capacity = 0;
for (int i = 0; i < n && capacity < m; ++i) {
int drives = mid / t[i];
capacity += drives * c[i];
}
if (capacity < m) {
st = mid + 1;
} else {
dr = mid;
}
}
vector<int> cap;
for (int i = 0; i < n; ++i) {
int drives = st / t[i];
cap.push_back(drives * c[i]);
}
sort(cap.begin(), cap.end());
int cnt = 0;
for (int i = n - 1; i >= 0 && m > 0; --i) {
m -= cap[i];
++cnt;
}
cout << st << " " << cnt << "\n";
return 0;
}