Pagini recente » Cod sursa (job #276252) | Cod sursa (job #2668241) | Cod sursa (job #1536283) | Cod sursa (job #2724046) | Cod sursa (job #1392814)
#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;
}