Cod sursa(job #2291416)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 27 noiembrie 2018 22:55:59
Problema Garaj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <algorithm>
#include <cstring>



std::ifstream fin("garaj.in");
std::ofstream fout("garaj.out");

static const int NMAX = 1e5+5;

int n, sticle, logN;

char s[15];
int ns;

struct tir{
    int capacitate, timp, coef;
} v[NMAX];

bool cmp(const tir &tir1, const tir &tir2)
{
    return tir1.coef < tir2.coef;
}

bool Check(int x)
{
    long long int s = 0;
    for(int i =1; i<= n; ++i)
    {
        s+= v[i].capacitate*(x/v[i].timp);
    }
    
    if(s < sticle)
        return true;
    return false;
}
inline int getnum()
{
    int x=0;
    while (s[ns]&&s[ns]!=' ')
        x=x*10+s[ns++]-'0';
    ns++;
    return x;
}

int main()
{
    fin >> n  >> sticle;
    fin.get();
    for(int i= 1; i<=n; ++i)
    {
        memset(s,0,sizeof(s));
        ns =0;
        fin.getline(s,15);
        v[i].capacitate = getnum();
        v[i].timp = getnum()*2;
    }


    logN = 1 << 30;
    int k = 0;
    for(int pas = logN; pas; pas >>=1)
    {
        if(Check(k+pas))
            k+=pas;
    }


    fout << k +1 << " ";
    int t = k+1;
    int z = 0;
    for(int i =1; i<= n; ++i){
        v[i].coef = (t / v[i].timp) * v[i].capacitate;
    }
    std::sort(v+1,v+n+1,cmp);

    int ct = 0;
    while(sticle>0 && n >= 1)
    {
        sticle-=v[n].coef;
        ct++;
        n--;
    }
    fout << ct;

    return 0;
}