Pagini recente » Cod sursa (job #471818) | Cod sursa (job #2814843) | Cod sursa (job #1897089) | Cod sursa (job #1666366) | Cod sursa (job #139964)
Cod sursa(job #139964)
#include <stdio.h>
#include <fstream>
#include <algorithm>
using namespace std;
#define in "garaj.in"
#define out "garaj.out"
#define dim 100000
int N, M, NrC, T;
int A[dim], B[dim], C[dim];
bool Solve(int);
int main()
{
int K = 0;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d", &N, &M);
for ( int i = 1; i <= N; i++ )
{
scanf("%d%d", &A[i], &B[i]);
if ( K < ( M * A[i] ) / (2*B[i]) ) K = ( M * A[i] ) / (2*B[i]);
}
int st = 1, dr = M, mij, T;
while ( st <= dr )
{
mij = (st+dr)>>1;
if ( !Solve(mij) ) st = mij+1;
else T = mij, dr = mij-1;
}
for ( int i = 1; i <= N; i++ )
C[i] = ( T / (2*B[i]) ) * A[i];
sort(C+1,C+N+1);
int S = 0;
for ( int i = N; i >= 1; i-- )
{
S += C[i];
if ( S >= M )
{
NrC = N-i+1;
break;
}
}
printf("%d %d", T, NrC);
}
bool Solve(int timp)
{
int S = 0;
for ( int i = 1; i <= N; i++ )
S += ( timp / (2*B[i]) ) * A[i];
if ( S >= M ) return 1;
return 0;
}