Cod sursa(job #2136060)

Utilizator robx12lnLinca Robert robx12ln Data 19 februarie 2018 16:31:53
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("garaj.in");
ofstream fout("garaj.out");
int N, V[100005];
int M, dr, st, mid, sol;
struct camion{
    int c, t;
} v[100005];
inline bool compare( const camion &A, const camion &B ){
    if( A.c == B.c )
        return A.t < B.t;
    return A.c > B.c;
}
inline bool check( int T ){
    int S = 0;
    for( int i = 1; i <= N; i++ ){
        S += ( T / (2 * v[i].t) ) * v[i].c;
        if( S >= M )
            return true;
    }
    return false;
}
int main(){
    ios::sync_with_stdio( false );
    fin >> N >> M;
    for( int i = 1; i <= N; i++ )
        fin >> v[i].c >> v[i].t;
    sort( v + 1, v + N + 1, compare );
    st = 1;
    dr = (1<<31) - 1;
    while( st <= dr ){
        mid = st + ( ( dr - st ) >> 1 );
        if( check( mid ) == true )
            dr = mid - 1;
        else
            st = mid + 1;
    }
    int T = st;
    for( int i = 1; i <= N; i++ )
        V[i] = ( T / (2 * v[i].t) ) * v[i].c;
    sort( V + 1, V + N + 1, greater<int>() );
    sol = 0;
    for( int i = 1; i <= N && M > 0; i++ )
        M -= V[i], sol++;
    fout << T << " " << sol << "\n";
    return 0;
}