Cod sursa(job #3289215)

Utilizator amunnumeVlad Patrascu amunnume Data 26 martie 2025 09:33:25
Problema Lapte Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
const int N=105;
struct elem
{
    int a,b,i,ans1,ans2;
};
bool cmp(elem x,elem y)
{
    return (x.a*y.b>x.b*y.a)||(x.a*y.b==x.b*y.a && x.b<y.b);
}
bool cmp2(elem x,elem y)
{
    return x.i<y.i;
}
int n,l,i,j,r,t,st,dr,mid,sol,lim[N];
elem v[N];
bool vrf(int r)
{
    int i,t=0,q=0;
    for(i=1;i<=n;++i)
    {
        lim[i]=r/v[i].a;
        t+=lim[i];
    }
    if(t<l) return 0;
    for(i=1;i<=n;++i)
    {
        while(t>l && lim[i]>=1)
        {
            --t;
            --lim[i];
        }
        q+=(r-lim[i]*v[i].a)/v[i].b;
    }
    if(q<l) return 0;
    return 1;
}
void cpy_ans(int r)
{
    for(i=1;i<=n;++i)
    {
        v[i].ans1=lim[i];
        v[i].ans2=(r-lim[i]*v[i].a)/v[i].b;
    }
}
void print()
{
    fout<<sol<<'\n';
    sort(v+1,v+n+1,cmp2);
    for(i=1;i<=n;++i)
    {
        fout<<v[i].ans1<<' '<<v[i].ans2<<'\n';
    }
}
signed main()
{
    fin>>n>>l;
    for(i=1;i<=n;++i)
    {
        fin>>v[i].a>>v[i].b;
        v[i].i=i;
    }
    sort(v+1,v+n+1,cmp);
    st=1; dr=200;
    while(st<=dr)
    {
        mid=(st+dr)>>1;
        if(vrf(mid))
        {
            cpy_ans(mid);
            sol=mid;
            dr=mid-1;
        }
        else
        {
            st=mid+1;
        }
    }
    print();
    return 0;
}