Pagini recente » Cod sursa (job #806804) | Cod sursa (job #3214245) | Borderou de evaluare (job #1058864) | Cod sursa (job #2690309) | Cod sursa (job #3139041)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("garaj.in");
ofstream cout("garaj.out");
const int MAXN = 1e5;
pair<int, int> camion[MAXN];
int check(int mij, int n){
int obj = 0, i;
for(i = 0; i < n; i++){
obj += mij / camion[i].second * camion[i].first;
}
return obj;
}
int main() {
int n, m, i, maxTimp, st, dr, mij, obj;
cin >> n >> m;
maxTimp = 0;
for(i = 0; i < n; i++){
cin >> camion[i].first >> camion[i].second;
maxTimp = max(maxTimp, m / camion[i].first * (camion[i].second = camion[i].second * 2));
}
// Cautare Binara
st = 1, dr = maxTimp;
while(st <= dr){
mij = (st + dr) / 2;
if(check(mij, n) < m){
st = mij + 1;
}else{
dr = mij - 1;
}
}
cout << st << " ";
sort(camion, camion + n, [&](pair<int, int> a, pair<int, int>b){
return (st / a.second * a.first) < (st / b.second * b.first);
});
i = obj = 0;
while(i < n && obj < m){
obj += st / camion[i].second * camion[i].first;
++i;
}
cout << i - 1;
return 0;
}