Cod sursa(job #139957)

Utilizator cos_minBondane Cosmin cos_min Data 20 februarie 2008 22:06:35
Problema Garaj Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#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()
{
    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]);
    
    int st = 1, dr = 100000*100, 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;
}