Pagini recente » Cod sursa (job #1639988) | Cod sursa (job #676101) | Cod sursa (job #1945191) | Cod sursa (job #960480) | Cod sursa (job #2939115)
#include <bits/stdc++.h>
#define MAXN 100
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
struct Pers {
int a, b, i;
};
int n, l;
Pers pers[MAXN];
pair<int, int> solve[MAXN];
bool check(int time, pair<int, int> currentSolve[]) {
int quantityA = l, quantityB = l;
for (int i = 0; i < n; i++) {
int difB = min(quantityB, time / pers[i].b);
int difA = (time - difB * pers[i].b) / pers[i].a;
quantityA -= difA;
quantityB -= difB;
currentSolve[pers[i].i] = {difA, difB};
}
return quantityA <= 0 && quantityB <= 0;
}
int main() {
int minTime = INT_MAX;
pair<int, int> currentSolve[MAXN];
fin >> n >> l;
for (int i = 0; i < n; i++) {
fin >> pers[i].a >> pers[i].b;
pers[i].i = i;
}
// sorting for greedy checkinn
sort(pers, pers + n, [](Pers a, Pers b) {
return a.a / a.b > b.a / b.b;
});
int lo = 1, hi = l;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (check(mid, currentSolve)) {
hi = mid - 1;
for (int i = 0; i < n; i++)
solve[i] = currentSolve[i];
minTime = mid;
} else
lo = mid + 1;
}
fout << minTime << '\n';
for (int i = 0; i < n; i++)
fout << solve[i].first << ' ' << solve[i].second << '\n';
return 0;
}