Pagini recente » Cod sursa (job #3195546) | Cod sursa (job #1927889) | Cod sursa (job #785303) | Cod sursa (job #2107349) | Cod sursa (job #1376861)
/*
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 *= 2;
}
int tmin = 0, nOk = 1<<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 sticle = 0,nrmin=1;
while (sticle <= m)
sticle += dp[nrmin],++nrmin;
cout << ' ' << nrmin - 1;
}
int main()
{
Solve();
return 0;
}