Cod sursa(job #1392866)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 18 martie 2015 22:45:54
Problema Garaj Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <algorithm>
#include <cstring>
#define nmax 100005
using namespace std;
ifstream f("garaj.in");
ofstream g("garaj.out");
struct camion{int c;int t;} v[nmax];
int n,m,ns,sol,sol2;
char s[15];

inline int getnum()
{
    int x=0;
    while (s[ns]&&s[ns]!=' ')
        x=x*10+s[ns++]-'0';
    ns++;
    return x;
}

int check(int k)
{
    int i;
    long long r=m;
    for (i=1;i<=n;i++)
        {r-=1LL*(k/2/v[i].t)*v[i].c;
         if (r<=0)
            return 1;
    }
    return 0;
}
bool cmp(const camion &a,const camion &b)
{
    return (a.c/a.t)>(b.c/b.t);
}
int main()
{
    int i,j,st,dr,mij;
    f>>n>>m;f.get();
    for (i=1;i<=n;i++) {
        memset(s,0,sizeof(s));
        ns=0;
        f.getline(s,15);
        v[i].c=getnum();
        v[i].t=getnum();
    }
    st=1;
    dr=1<<30;
    while (st<=dr) {
        mij=(st+dr)>>1;
        if (check(mij)) {
            sol=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    g<<sol<<' ';
    sort(v+1,v+n+1,cmp);
    for (i=1;i<=n;i++) {
        sol2++;
        m-=(sol/2/v[i].t)*v[i].c;
        if (m<=0)
            break;
    }
    g<<sol2<<'\n';
    return 0;
}