Cod sursa(job #2929019)

Utilizator LucapetreMirea Bulubasa Petre Luca Lucapetre Data 24 octombrie 2022 14:22:23
Problema Lapte Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");

int n,l;
struct om {
    int a,b,i;

    friend bool operator<(om x,om y) { return x.a*y.b>x.b*y.a; } //x.a/x.b < y.a/y.b

}v[105];



vector<pair<int,int>> ansv;
vector<pair<int,int>> ansvr;

void put_answer(om x,int la,int lb) {
    ansv[x.i].first=la;
    ansv[x.i].second=lb;
}

bool testt(int tmin) {

    int lapteA=l,lapteB=l;
    for(int i=1;i<=n;i++) {
        int lb = min(lapteB,tmin/v[i].b);
        int la = (tmin - lb * v[i].b)/v[i].a;
        put_answer(v[i],la,lb);
        lapteA-=la;
        lapteB-=lb;
    }
    return lapteA <= 0 && lapteB <= 0;

}

int caut() {
    int st=1,dr=100,mij,r=-1;
    while(st<=dr) {
        mij = (st+dr)/2;
        bool ok = testt(mij);
        if(ok) {
            dr=mij-1;
            r=mij;
            ansvr = ansv;
        }

        else st=mij+1;
    }
    return r;
}

int main() {

    fin>>n>>l;
    ansv.resize(n+1);

    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 rasp = caut();
    fout<<rasp<<'\n';

    for(int i=1;i<=n;i++){
        fout<<ansvr[i].first<<' '<<ansvr[i].second<<'\n';
    }
    return 0;
}