Cod sursa(job #1392877)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 18 martie 2015 22:54:47
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 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 di[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=0;
    for (i=1;i<=n;i++)
        {r+=1LL*(k/v[i].t)*v[i].c;
         if (r>=m*1LL)
            return 1;
    }
    return 0;
}
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()*2;
    }
    st=1;
    dr=2000000000;
    while (st<=dr) {
        mij=(st+dr)>>1;
        if (check(mij)) {
            sol=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    g<<sol<<' ';
    for (i=1;i<=n;i++)
        di[i]=(v[i].c)*(sol/v[i].t);
    sort(di+1,di+n+1);

    for (i=n;i>=1&&m>0;i--) {
        sol2++;
        m-=di[i];
    }
    g<<sol2<<'\n';
    return 0;
}