Cod sursa(job #1647877)

Utilizator antanaAntonia Boca antana Data 10 martie 2016 22:34:20
Problema Garaj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>
#include<algorithm>
#define MAX 100000
using namespace std;
struct aa{
    int c, t;
}; aa v[MAX+1];
bool cresc(aa a, aa b){
    return ((1.0*a.c/a.t)>=(1.0*b.c/b.t));
}
int n;
inline int ok(long long timp, long long m)
{
    long long i, x=0;
    for(i=1;i<=n;i++)
        x+=timp/(v[i].t*2)*v[i].c;
    if(x>=m)
        return 1;
    return 0;
}
int main()
{
    freopen("garaj.in", "r", stdin);
    freopen("garaj.out","w", stdout);
    int i, maxi=-1, s=0;
    long long m, st, dr, mij, mintime, x=0;
    scanf("%d%lld", &n, &m);
    for(i=1;i<=n;i++){
        scanf("%d%d", &v[i].c, &v[i].t);
        if(maxi<v[i].t)
            maxi=v[i].t;
    }
    sort(v+1, v+n+1, cresc);
    dr=maxi*m;
    mintime=dr+1;
    st=1;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(ok(mij, m))
        {
            if(mij<mintime)
                mintime=mij;
            dr=mij-1;
        }
        else st=mij+1;
    }
    printf("%lld ", mintime);
    i=1;
    while(x<m)
    {
        x+=mintime/(v[i].t*2)*v[i].c;
        i++;
        s++;
    }
    printf("%d", s);
    return 0;
}