Cod sursa(job #139968)

Utilizator cos_minBondane Cosmin cos_min Data 20 februarie 2008 22:26:31
Problema Garaj Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

#define in "garaj.in"
#define out "garaj.out"
#define dim 100000

int N, M, NrC, T;
int A[dim], B[dim];

vector<int> C;

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]), B[i] *= 2;
    
    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;
    }       
    
    int H;
    for ( int i = 1; i <= N; i++ )
    {
        H = ( T / B[i] ) * A[i];
        C.push_back(H);
    }
     
    sort(C.rbegin(),C.rend());
     
    int S = 0;
    for ( int i = 0; i < C.size(); i++ )
    {
         S += C[i];
         if ( S >= M ) 
         {
              NrC = i+1;
              break;
         }
     }

    
    printf("%d %d\n", T, NrC);
}

bool Solve(int timp)
{
     int S = 0, H;
     for ( int i = 1; i <= N; i++ )
     {
         H = timp / B[i];
         S += H*A[i];
     }
     
     if ( S >= M ) return 1;
     return 0;
}