Cod sursa(job #1376874)

Utilizator taigi100Cazacu Robert taigi100 Data 5 martie 2015 19:17:04
Problema Garaj Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
/*
    Keep It Simple!
*/

#include <fstream>
#include <vector>
#include <list>
#include <stack>
#include <string>
#include <cmath>
#include <queue>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("garaj.in");
ofstream cout("garaj.out");

#define ll long long
#define mp make_pair
#define fi first
#define se second
#define pb push_back

typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

const int kMaxN = 100005;

int n,m;
pii truck[kMaxN];
int dp[kMaxN];

bool Check(int timp)
{
    ll sticle = 0;
    for(int i=1;i<=n;++i)
        sticle += timp / truck[i].second * truck[i].first;
    return sticle >= m;
}

void Solve()
{
    cin >> n >> m;
    for(int i=1;i<=n;++i)
    {
        cin >> truck[i].first >> truck[i].second;
        truck[i].second <<= 1;
    }

    int tmin = 0, nOk = 1LL<<29;

    while(nOk)
    {
        if(!Check(tmin|nOk))
            tmin |= nOk;
        nOk >>= 1;
    }
    ++tmin;

    cout << tmin;

    for(int i=1;i<=n;++i)
        dp[i] = tmin / truck[i].second * truck[i].first;
    sort(dp+1,dp+n+1,greater<int>());
    int nrmin=1;
    while (m > 0)
         m -= dp[nrmin++];

    cout << ' ' << nrmin-1;
}

int main()
{
    Solve();
    return 0;
}