Cod sursa(job #2400739)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 9 aprilie 2019 08:24:07
Problema Lapte Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <bits/stdc++.h>

using namespace std;

const int N = 100 + 7;

int n, k;

struct triple {
        int first;
        int second;
        int third;
};

triple v[N];

bool cmp(triple a, triple b) {
        return a.first - a.second < b.first - b.second;
}

int have[N];
int ta[N], tb[N];

bool ok(int t) {
        for (int i = 1; i <= n; i++) {
                have[i] = t;
                ta[i] = tb[i] = 0;
        }
        int need = k;
        for (int i = 1; i <= n; i++) {
                int pot = have[i] / v[i].first;
                t = min(pot, need);
                need -= t;
                have[i] -= v[i].first * t;
                ta[v[i].third] += t;
        }
        if (need > 0) {
                return 0;
        }
        need = k;
        for (int i = 1; i <= n; i++) {
                int pot = have[i] / v[i].second;
                t = min(pot, need);
                need -= t;
                have[i] -= v[i].second * t;
                tb[v[i].third] += t;
        }
        if (need > 0) {
                return 0;
        }
        return 1;
}

int main() {
        freopen ("lapte.in", "r", stdin);
        freopen ("lapte.out", "w", stdout);
        cin >> n >> k;
        for (int i = 1; i <= n; i++) {
                cin >> v[i].first >> v[i].second;
                v[i].third = i;
        }
        sort(v + 1, v + n + 1, cmp);
        int l = 0;
        int r = 1e9;
        int ans;
        while (l <= r) {
                int m = (l + r) / 2;
                if (ok(m)) {
                        ans = m;
                        r = m - 1;
                } else {
                        l = m + 1;
                }
        }
        ok(ans);
        cout << ans << "\n";
        for (int i = 1; i <= n; i++) {
                cout << ta[i] << " " << tb[i] << "\n";
        }
        return 0;
}