Cod sursa(job #1490824)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 24 septembrie 2015 11:03:08
Problema Garaj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>

#define F first
#define S second

using namespace std;

const int Nmax = 100000 + 10;

int n , m , i , tmp , crt;
int v[Nmax];

pair < int , int > a[Nmax];

bool check(int t)
{
    long long ret = 0;

    for (i = 1; i <= n; ++i)
        ret += 1LL * a[i].F * (t / a[i].S);

    return (ret >= 1LL * m);
}

int search_()
{
    int i , step = (1 << 29);

    for (i = 0; step; step >>= 1)
        if (!check(i + step))
            i += step;

    return i + 1;
}

int main()
{
    freopen("garaj.in","r",stdin);
    freopen("garaj.out","w",stdout);

    scanf("%d %d", &n, &m);

    for (i = 1; i <= n; ++i)
    {
        scanf("%d %d", &a[i].F, &a[i].S);
        a[i].S <<= 1;
    }

    tmp = search_();
    for (i = 1; i <= n; ++i)
        v[i] = a[i].F * (tmp / a[i].S);

    sort(v + 1 , v + n + 1);
    for (i = n; i ; --i)
    {
        crt += v[i];
        if (crt >= m) break;
    }

    printf("%d %d\n", tmp , n - i + 1);





    return 0;
}