Pagini recente » Cod sursa (job #696776) | Cod sursa (job #1442985) | Cod sursa (job #199772) | Cod sursa (job #1404874) | Cod sursa (job #1393376)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("garaj.in");
ofstream fout ("garaj.out");
typedef struct { int c, t; } art;
unsigned int N, M, S[100010];
art V[100010];
unsigned int Verif(long long timp)
{
long long v = 0;
for (int i = 1; i <= N; i++) {
v += timp / V[i].t * V[i].c;
if (v > M) return M + 1;
}
return v;
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; i++)
{
fin >> V[i].c >> V[i].t;
V[i].t *= 2;
}
long long st = 1, dr = (1LL << 60), mij, cmin, tmin;
while (st <= dr)
{
mij = (st + dr) / 2;
cmin = Verif(mij);
if (cmin < M) st = mij + 1;
else if (cmin > M) dr = mij - 1, tmin = mij;
else tmin = mij, st = dr + 1;
}
fout << tmin << ' ';
for (int i = 1; i <= N; i++) {
S[i] = tmin / V[i].t * V[i].c;
}
sort (S + 1, S + 1 + N);
int val = 0;
for (int i = N; i >= 1; i--)
{
val += S[i];
if (val >= M)
{
fout << N - i + 1 << '\n';
break;
}
}
fout.close();
return 0;
}