Cod sursa(job #1569642)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 15 ianuarie 2016 20:17:48
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;


struct om
{
    int v1,v2;

    bool operator < (const om &t) const
    {
        if(t.v1==v1) return t.v2<v2;
        return t.v1>v1;
    }
} pers[101];

int n,l;
int sol[2][101];

int isok(int tmp)
{
    int i,c1=0,c2=0,ca1=0,ca2=0;

    //cout<<tmp<<'\n';
    for(i=1;i<=n;i++)
    {
       // cout<<c1<<' '<<c2<<"  ";
        if(c1>=l) { ca2=tmp/pers[i].v2; c2+=ca2; sol[1][i]=ca2; }
        else
        {
            if(l-c1 >= tmp/pers[i].v1) { ca1=tmp/pers[i].v1; c1+=ca1; sol[0][i]=ca1; }
            else
            {
                sol[0][i]=l-c1;
                ca2=(tmp-(l-c1)*pers[i].v1)/pers[i].v2;
                c1=l;
                c2+=ca2; sol[1][i]=ca2;
            }
        }
        //cout<<c1<<' '<<c2<<'\n';
    }// cout<<'\n';
    if(c1>=l && c2>=l) return 1;
    else return 0;
}

int main()
{
    freopen("lapte.in","r",stdin);
    freopen("lapte.out","w",stdout);
    int poz,lc,i;
    cin>>n>>l;
    for(i=1;i<=n;i++) cin>>pers[i].v1>>pers[i].v2;
    for(poz=1;poz<100;poz<<=1);
    sort(pers+1,pers+n+1);

    for(i=100,lc=poz; lc; lc>>=1)
    {
        //cout<<lc<<' '<<i<<'\n';
        if(i-lc>0 && isok(i-lc) ) i-=lc;
    }
    cout<<i<<'\n';
    return 0;
}