Pagini recente » Cod sursa (job #1766689) | Cod sursa (job #1367399) | Cod sursa (job #2450986) | Rating Panait Mihai-Petru (Petru_77) | Cod sursa (job #665190)
Cod sursa(job #665190)
#include <fstream>
#include <algorithm>
#include <utility>
using namespace std;
ifstream fin("garaj.in");
ofstream fout("garaj.out");
void Read();
void Solve();
bool Test(int x);
void Write();
int n, m;
pair<int, int> v[100001];
int mint, minc;
int main()
{
Read();
Solve();
Write();
}
void Read()
{
fin >> n >> m;
for (int i = 1; i <= n; ++i)
fin >> v[i].second >> v[i].first;
fin.close();
}
void Solve()
{
int step, i;
for (step = 1; step << 1 <= 1000000000; step <<= 1);
for (i = 1000000000; step; step >>= 1)
if (i - step >= 0 && Test(i - step))
i -= step, mint = i;
for (int i = 1; i <= n; ++i)
v[i].first = int(mint / (v[i].first * 2)) * v[i].second;
sort(v + 1, v + n + 1);
int sum = 0;
for (int i = n; i >= 1 && sum < m; --i)
sum += v[i].first, ++minc;
}
bool Test(int x)
{
int mxm = 0;
for (int i = 1; i <= n; ++i)
{
mxm += int(x / (v[i].first * 2)) * v[i].second;
if (mxm >= m) return true;
}
return false;
}
void Write()
{
fout << mint << ' ' << minc;
fout.close();
}