Pagini recente » Cod sursa (job #1686435) | Cod sursa (job #1783225) | Cod sursa (job #1823742) | Cod sursa (job #2318946) | Cod sursa (job #1490848)
#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)
{
int ret = 0;
for (i = 1; i <= n; ++i)
{
ret += a[i].F * (t / a[i].S);
if (ret >= m) break;
}
return (ret >= 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;
}