Cod sursa(job #2291401)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 27 noiembrie 2018 22:35:29
Problema Garaj Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
#include <algorithm>
FILE *fin = freopen("garaj.in","r",stdin);
FILE *fout = freopen("garaj.out","w",stdout);

static const int NMAX = 1e5;

int n, sticle, logN;
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;
}


int main()
{
    scanf("%d%d",&n,&sticle);
    for(int i= 1; i<=n; ++i)
    {
        scanf("%d%d",&v[i].capacitate,&v[i].timp);
        v[i].timp*=2;
    }
    logN = 1 << 30;
    int k = 0;
    for(int pas = logN; pas; pas >>=1)
    {
        if(Check(k+pas))
            k+=pas;
    }
    printf("%d ",k+1);
    int t = k+1;
    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)
    {
        if(v[n].timp <= t)
            sticle-=v[n].coef;
        ct++;
        n--;
    }
    printf("%d",ct);

    return 0;
}