Pagini recente » Cod sursa (job #1430252) | Cod sursa (job #1545139) | Cod sursa (job #3190880) | Cod sursa (job #2224287) | Cod sursa (job #3142944)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n, l;
struct tripl {
int a, b, i;
bool operator <(const tripl &oth) {
return this->a * oth.b < oth.a * this->b;
}
};
tripl v[102];
tripl ans[102];
inline bool ver(int t) {
int l1 = l, l2 = l;
/* for(int i = 1;i <= n;i++) {
if(l1 >= t / v[i].a) {
l1 -= t / v[i].a;
int rest = t % v[i].a;
ans[v[i].i] = {t / v[i].a, rest / v[i].b, v[i].i};
l2 -= rest / v[i].b;
}
else {
int rest = t - l1 * v[i].a;
ans[v[i].i] = {l1, rest / v[i].b, v[i].i};
l1 = 0;
l2 -= rest / v[i].b;
}
} */
for(int i = 1;i <= n;i++) {
int cant1 = min(t / v[i].a, l1);
int cant2 = (t - cant1 * v[i].a) / v[i].b;
ans[v[i].i] = {cant1, cant2, v[i].i};
l1 -= cant1;
l2 -= cant2;
}
if(l1 <= 0 && l2 <= 0)
return 1;
return 0;
}
int main() {
fin >> n >> l;
for(int i = 1;i <= n;i++)
fin >> v[i].a >> v[i].b, v[i].i = i;
sort(v + 1, v + n + 1);
int pas = 128, r = -1;
while(pas) {
if(100 - (r + pas) >= 0 && ver(100 - (r + pas))) {
r += pas;
}
pas >>= 1;
}
int t = 100 - r;
fout << t << "\n";
for(int i = 1;i <= n;i++)
fout << ans[i].a << " " << ans[i].b << "\n";
return 0;
}