Pagini recente » Cod sursa (job #1450527) | Cod sursa (job #2872000) | Cod sursa (job #499173) | Cod sursa (job #2128011) | Cod sursa (job #1392873)
#include <algorithm>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("garaj.in");
ofstream fout("garaj.out");
const int inf= 1<<30;
const int nmax= 100001;
string buffer;
string::iterator buffer_it;
void read_int_nn( int &x ) {
for ( ; *buffer_it>'9' || *buffer_it<'0'; ++buffer_it ) ;
for ( x= 0; *buffer_it<='9' && *buffer_it>='0'; ++buffer_it ) {
x= x*10+*buffer_it-'0';
}
}
int n, m;
int nr[nmax+1];
struct str {
int c, t;
};
str v[nmax+1];
bool check( int x ) {
int aux= 0;
for ( int i= 1; i<=n; ++i ) {
aux= aux+x/v[i].t*v[i].c;
if ( aux>=m ) return 1;
}
return 0;
}
int main( ) {
getline( fin, buffer, (char)0 ) ;
buffer_it= buffer.begin();
read_int_nn(n), read_int_nn(m);
for ( int i= 1; i<=n; ++i ) {
read_int_nn(v[i].c), read_int_nn(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;
}