Cod sursa(job #139184)

Utilizator filipbFilip Cristian Buruiana filipb Data 19 februarie 2008 19:57:37
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

#define ll long long
#define NMax 100005

int N, M, C[NMax], T[NMax], bst;

int main(void)
{
    int i, l, r, m;
    ll trans;
    
    freopen("garaj.in", "r", stdin);
    freopen("garaj.out", "w", stdout);

    scanf("%d %d", &N, &M);
    for (i = 1; i <= N; i++)
    {
        scanf("%d %d", &C[i], &T[i]);
        T[i] <<= 1;
    }

    l = 1; r = 2000000001;
    for (; l <= r; )
    {
        m = (l + r) / 2;
        
        for (i = 1, trans = 0; i <= N && trans < M; i++)
            trans += (ll)C[i] * (m / T[i]);

        if (trans >= M)
            r = m-1, bst = m;
        else
            l = m+1;
    }

    for (i = 1; i <= N; i++)
        C[i] *= (bst / T[i]);
    sort(C+1, C+N+1);

    for (i = N, trans = 0; trans < M; --i)
        trans += C[i];
        
    printf("%d %d\n", bst, N-i);

    
    return 0;
}