Cod sursa(job #1490505)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 23 septembrie 2015 18:07:54
Problema Garaj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <algorithm>
#define MAXN 100000
typedef struct{
    int c, t;
}mycreation;
mycreation v[MAXN];
int n, rez, m;
bool cmp(const mycreation a, const mycreation b){
    return (a.c*(rez/a.t)>b.c*(rez/b.t));
}
bool ok(int x){
    long long s=0;
    for(int i=0; i<n; i++){
        s+=v[i].c*(long long)(x/v[i].t);
        if(s>=m){
            return false;
        }
    }
    return true;
}
int main(){
    int i, pas, s;
    FILE *fin, *fout;
    fin=fopen("garaj.in", "r");
    fout=fopen("garaj.out", "w");
    fscanf(fin, "%d%d", &n, &m);
    for(i=0; i<n; i++){
        fscanf(fin, "%d%d", &v[i].c, &v[i].t);
        v[i].t*=2;
    }
    rez=-1;
    for(pas=1<<30; pas; pas>>=1){
        if(ok(rez+pas)){
            rez+=pas;
        }
    }
    rez++;
    std::sort(v, v+n, cmp);
    i=0;
    s=0;
    while((s<m)&&(i<n)){
        s+=v[i].c*(rez/v[i].t);
        i++;
    }
    fprintf(fout, "%d %d\n", rez, i);
    fclose(fin);
    fclose(fout);
    return 0;
}