Cod sursa(job #1392867)

Utilizator Athena99Anghel Anca Athena99 Data 18 martie 2015 22:46:19
Problema Garaj Scor 60
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= 100001;

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/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;
        v[i].t= 2*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/v[i].t*v[i].c;
    }
    sort( nr+1, nr+n+1 ) ;

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


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

    return 0;
}