Cod sursa(job #1392814)

Utilizator Athena99Anghel Anca Athena99 Data 18 martie 2015 22:01:12
Problema Garaj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <algorithm>
#include <fstream>

using namespace std;

ifstream fin("garaj.in");
ofstream fout("garaj.out");

typedef long long i64;

const int inf= 1<<30;
const int nmax= 100000;

int n, m;
int nr[nmax+1];

struct str {
    int c, t;
};

str v[nmax+1];

bool check( int x ) {
    i64 aux= 0;
    for ( int i= 1; i<=n; ++i ) {
        aux= (i64)aux+(i64)x/(2*v[i].t)*v[i].c;
    }

    if ( aux>=m ) return 1;
    return 0;
}

int main(  ) {
    fin>>n>>m;
    for ( int i= 1; i<=n; ++i ) {
        fin>>v[i].c>>v[i].t;
    }

    int sol= inf, trmin= 0;
    for ( int step= inf; step>0; step/= 2 ) {
        if ( sol-step>=0 && check(sol-step)==1 ) {
            sol-= step;
        }
    }

    for ( int i= 1; i<=n; ++i ) {
        nr[i]= sol/(2*v[i].t)*v[i].c;
    }
    sort( nr+1, nr+n+1 ) ;

    for ( int i= n, sum= 0; i>=1; --i ) {
        if ( sum>=m ) break;
        ++trmin, sum+= nr[i];
    }


    fout<<sol<<" "<<trmin<<"\n";

    return 0;
}