Pagini recente » Cod sursa (job #1894393) | Cod sursa (job #2420117) | Cod sursa (job #2093812) | Cod sursa (job #3141467) | Cod sursa (job #2136060)
#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;
}