1 条题解
-
0
C++ :
#include <stdio.h> #include <algorithm> #include <iostream> typedef long long llong; llong div(llong a, llong b) { return (a + b-1) / b; } void maxlis(llong &x, llong a) { x = std::max(x, a); } llong a, b, x, y, m; llong max_hurt(llong k) { llong h = x * k; if (k == 1) return h; maxlis(h, (k-1) * x + a + b * (k-1)); llong z = (a+b) + x * y; llong zcnt = k / (y+1); if (k % (y+1) == 0) { maxlis(h, z * (zcnt - 1) + y * x + a + y * b); } else if (k % (y+1) == 1) { maxlis(h, z * (zcnt - 1) + (y+1) * x + a + (y+1) * b); } else if (k % (y+1) == 2) { maxlis(h, z * zcnt + x + a + b); } else { llong r = k % (y+1); maxlis(h, z * zcnt + (r-1) * x + a + b * (r-1)); } return h; } int main() { //freopen("../data/E.in", "r", stdin); //freopen("../data/tmpE.out", "w", stdout); int casc; scanf("%d", &casc); for (int casi =1 ; casi <= casc; ++casi) { //scanf("%I64d %I64d %I64d %I64d %I64d", &a, &b, &x, &y, &m); std::cin >> a >> b >> x >> y >> m; llong l = 0; llong r = m; // [r, l) //std::cout << max_hurt(32LL) << "\n"; for (; r-l > 1; ) { llong mid = (l+r) >> 1; llong now = max_hurt(mid); if (now >= m) r = mid; else l = mid; } //printf("%I64d\n", r); std::cout << r << std::endl; } return 0; }
- 1
信息
- ID
- 3506
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者