Pagini recente » Cod sursa (job #2293033) | Cod sursa (job #2723083) | Cod sursa (job #1145204) | Cod sursa (job #2243909) | Cod sursa (job #138381)
Cod sursa(job #138381)
#include <cstdio>
#include <algorithm>
using namespace std;
const char iname[] = "garaj.in";
const char oname[] = "garaj.out";
typedef long long i64;
#define MAXN 100005
i64 C[MAXN], T[MAXN];
int n, nrst;
i64 work(int n, i64 delta)
{
i64 cnt = 0;
for (int i = 0; i < n; ++ i)
cnt += ((i64)(delta / (2 * T[i]))) * C[i];
return cnt;
}
int main(void)
{
FILE *fi, *fo;
fi = fopen(iname, "r");
fscanf(fi, "%d %d", &n, &nrst);
for (int i = 0; i < n; ++ i)
fscanf(fi, "%lld %lld", &C[i], &T[i]);
fclose(fi);
const i64 inf = (i64)(2e12);
i64 delta, stp;
for (stp = 1; stp <= inf; stp <<= 1) ;
for (delta = 0; stp; stp >>= 1) if (delta + stp <= inf)
if (work(n, delta + stp) < nrst)
delta += stp;
if (work(n, delta) < nrst)
delta ++;
for (int i = 0; i < n; ++ i)
C[i] = (delta / (2 * T[i])) * C[i];
sort(C, C + n);
i64 cnt = 0;
int res = 0;
for (int i = n - 1; i >= 0; -- i)
{
cnt += C[i];
res ++;
if (cnt >= (i64)nrst)
break ;
}
fo = fopen(oname, "w");
fprintf(fo, "%lld %d\n", delta, res);
fclose(fo);
return 0;
}