Pagini recente » Cod sursa (job #2149733) | Cod sursa (job #1737005) | Arhiva de probleme | Cod sursa (job #292023) | Cod sursa (job #1373757)
#include <fstream>
#include <algorithm>
using namespace std;
const int kMaxN = 100005;
ifstream fin("garaj.in");
ofstream fout("garaj.out");
int N, M;
struct {
int c, t;
} truck[kMaxN];
int amount[kMaxN];
long long tmin;
int nrmin;
bool Check(long long time) {
long long s = 0;
for (int i = 0; i < N; ++i)
s += time / truck[i].t * truck[i].c;
return s >= M;
}
int main() {
fin >> N >> M;
for (int i = 0; i < N; ++i) {
fin >> truck[i].c >> truck[i].t;
truck[i].t <<= 1;
}
for (long long step = 1LL << 40; step; step >>= 1) {
if (!Check(tmin | step))
tmin |= step;
}
++tmin;
for (int i = 0; i < N; ++i)
amount[i] = tmin / truck[i].t * truck[i].c;
sort(amount, amount + N, greater<int>());
while (M > 0)
M -= amount[nrmin++];
fout << tmin << " " << nrmin << "\n";
return 0;
}