Cod sursa(job #766572)

Utilizator ioanabIoana Bica ioanab Data 11 iulie 2012 16:40:46
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream in("lapte.in");
ofstream out("lapte.out");

const int N=105;
int n,l;

struct point
{
    int a,b,poz;
};
point x[N],rez[N];

bool cmp(point x, point y)
{
    return x.a-x.b < y.a-y.b;
}


bool ok(int t)
{
    int la=0,lb=0,k,i;
    k=1;
    for(i=1;i<=n;i++)
        rez[i].a=rez[i].b=0;

    while(k<=n && la<l)
    {
        if(la+t/x[k].a>=l)
        {
            rez[x[k].poz].a=l-la;
            lb=(t-(l-la)*x[k].a)/x[k].b;
            rez[x[k].poz].b=lb;
            k++;
            break;
        }
        la+=t/x[k].a;
        rez[x[k].poz].a=t/x[k].a;

        k++;
    }

    while(k<=n && lb<l)
    {
        lb+=t/x[k].b;
        rez[x[k].poz].b=t/x[k].b;
        k++;
    }

    if(lb>=l)
        return true;
    return false;

}



int bs()
{
    int i,pas=1<<13;
    for(i=1;pas;pas>>=1)
    {
        if(!ok(i+pas))
            i+=pas;
    }
    return i+1;
}


int main()
{
    int i,t;
    in>>n>>l;
    for(i=1;i<=n;i++)
    {
        in>>x[i].a>>x[i].b;
        x[i].poz=i;
    }

    sort(&x[1],&x[n+1],cmp);
    t=bs();
    out<<t<<"\n";
    i=ok(t);
    for(i=1;i<=n;i++)
        out<<rez[i].a<<" "<<rez[i].b<<"\n";


    return 0;
}