Pagini recente » Cod sursa (job #981238) | Monitorul de evaluare | Cod sursa (job #1638964) | Cod sursa (job #608516) | Cod sursa (job #1490824)
#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;
}