Pagini recente » Cod sursa (job #2907944) | Cod sursa (job #2728056) | Cod sursa (job #676847) | Cod sursa (job #478841) | Cod sursa (job #1376887)
/*
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;
struct manigga
{
int a,b;
}truck[kMaxN];
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].b * truck[i].a;
return sticle >= m;
}
void Solve()
{
cin >> n >> m;
for(int i=1;i<=n;++i)
{
cin >> truck[i].a >> truck[i].b;
truck[i].b <<= 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].b * truck[i].a;
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;
}