Pagini recente » Cod sursa (job #1169089) | Cod sursa (job #2262256) | Cod sursa (job #2716536) | Cod sursa (job #468356) | Cod sursa (job #137309)
Cod sursa(job #137309)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
const int n_max = 100002;
vector <long long > v;
int t[n_max], c[n_max];
long long MIN;
int i, n, m;
bool greedy(long long x)
{
v.clear();
long long trans;
long long k;
int i;
k = m;
for (i = 1; i <= n; ++ i)
{
trans = (x/(2*t[i]));
v.push_back(trans*c[i]);
}
sort(v.begin(),v.end());
for (i = n-1; k>0 && i>=0; -- i)
{
k-=v[i];
}
if (k >0)
return false;
else
{
MIN = (n-1)-i;
return true;
}
}
int binary_search()
{
long long N=(long long)1<<60;
long long i, step;
for (step = 1; step < N; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step < N && !greedy(i+step))
i += step;
return i;
}
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", &c[i], &t[i]);
}
printf("%lld ",binary_search()+1);
printf("%lld\n", MIN);
return 0;
}