Cod sursa(job #1116958)

Utilizator rughibemBelcineanu Alexandru Ioan rughibem Data 22 februarie 2014 22:13:10
Problema Garaj Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<stdio.h>
#include<algorithm>
#define DIM 100005
FILE *f=fopen("garaj.in","r"), *g=fopen("garaj.out","w");

using namespace std;

struct caracteristici{
    long int c, t;      // capacitate, timp
} v[DIM];

long int NrCamioane, NrSticle, Tmin, w[DIM];

void citire(){
long int i;

    fscanf(f,"%ld %ld\n",&NrCamioane,&NrSticle);
    for(i=1;i<=NrCamioane;i++)
        fscanf(f,"%ld %ld\n",&v[i].c,&v[i].t);

}

bool verificare(long int T){
long int i, Sticle;

    Sticle=0;
    for(i=1;i<=NrCamioane;i++)
        Sticle+= ( T/(v[i].t*2) )*v[i].c;

    if( Sticle >= NrSticle ) return 1;
    return 0;

}

void gasire_timp(){
long int p, u, mij;

    p=1; u=2*NrSticle;

    while(p<=u){

        mij= (p+u)/2;
        if( verificare(mij) ) u=mij-1;
        else p=mij+1;

    }   Tmin=p;

    fprintf(g,"%ld ",Tmin);

}

bool cmp( long int a, long int b ){
    if(a>b)return 1;
    return 0;
}

void gasire_camioane(){
long int i, Sticle;

    for(i=1;i<=NrCamioane;i++)
        w[i]= ( Tmin/(v[i].t*2) )*v[i].c;

    sort(w+1,w+NrCamioane+1,cmp);

    //for(i=1;i<=NrCamioane;i++){fprintf(g,"%ld ",w[i]);}

    Sticle=0; i=1;
    while( i<=NrCamioane ){
        Sticle+=w[i];
        if( Sticle>=NrSticle ) break;
        i++;
    }
    fprintf(g,"%ld\n",i);

}

int main(){

    citire();
    gasire_timp();
    gasire_camioane();

return 0;
}