Cod sursa(job #2136021)

Utilizator robx12lnLinca Robert robx12ln Data 19 februarie 2018 16:06:33
Problema Garaj Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<cstdio>
#include<algorithm>
using namespace std;
FILE * fin = fopen("garaj.in","r");
FILE * fout = fopen("garaj.out","w");
int n, m, p,u, mid, x[100005], cars;
int c[100005], t[100005];
int verif( int T ){
    int sum = 0;
    for( int i = 1; i <= n; i++ ){
        sum += ( T / (t[i] * 2) ) * c[i];
        if( sum >= m )
            return 1;
    }
    return 0;
}
int main(){
    fscanf(fin,"%d %d",&n,&m);
    for ( int i = 1; i <= n; i++ ){
        fscanf(fin,"%d %d",&c[i],&t[i]);
    }
    p = 1;
    u = m * 1LL * 1000;
    while( p <= u ){
        mid = ( p + u ) / 2;
        if( verif(mid) ){
            u = mid -1;
        }else{
            p = mid + 1;
        }
    }
    cars = 0;
    for( int i = 1; i <= n; i++ ){
        x[i] = ( p / (t[i] * 2) ) * c[i];
    }
    sort( x + 1, x + n + 1 );
    int k = m;
    for( int i = n; i >= 1; i-- ){
        cars++;
        k -= x[i];
        if( k <= 0){
            break;
        }
    }
    fprintf(fout,"%d %d",p,cars);
    return 0;
}