Pagini recente » Cod sursa (job #2936868) | Cod sursa (job #1781294) | Cod sursa (job #1485544) | Cod sursa (job #2756689) | Cod sursa (job #1376874)
/*
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;
}