Cod sursa(job #1113707)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 20 februarie 2014 20:35:52
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct cam{
    int c;
    int t;
}v[101000];
int n,m,i,j,t[101000],ok,nr,nmin,mid,p,u;
FILE *f,*g;
/*int cmp(cam a,cam b){
    return a.c/a.t>b.c/b.t;
}
*/
int verif(int t){
    int i,c,x=m;
    for(i=1;i<=n;i++){
        x-=t/(v[i].t*2)*v[i].c;
        if(x<=0){
            return 1;
        }
    }
    return 0;
}
int main(){
    f=fopen("garaj.in","r");
    g=fopen("garaj.out","w");
    fscanf(f,"%d%d\n",&n,&m);
    for(i=1;i<=n;i++){
        fscanf(f,"%d%d",&v[i].c,&v[i].t);
    }
    //sort(v+1,v+n+1,cmp);
    p=1;
    u=2*m;
    while(p<=u){
        mid=p+(-p+u)/2;
        ok=verif(mid);
        if(ok==1){
            u=mid-1;
        }
        else
            p=mid+1;
    }
    for(i=1;i<=n;i++){
        t[i]=p/(v[i].t*2)*v[i].c;
    }
    sort(t+1,t+n+1);
    for(i=n;i>=0;i--){
        m-=t[i];
        if(m<=0){
            nmin=n-i+1;
            break;
        }
    }
    fprintf(g,"%d %d",p,nmin);




    fclose(f);
    fclose(g);
    return 0;
}