龙脊雪山
时间限制:1s
空间限制:64MB
龙脊雪山是《原神》中的一个地理区域。该地理区域的特点是赋予旅行者「严寒值」,在「严寒值」达到上限时令旅行者持续受到伤害,直至死亡。
在龙脊雪山第 \(t\) 秒内使旅行者累计 \(2t + 3\) 大小的「严寒值」,当严寒值大于等于 \(\text{lim}\),旅行者将会持续受到每秒钟 \(x\) 点的伤害。
现在你以 \(v\) 米每秒的速度登山且有 \(h\) 点生命值,求到达龙脊雪山的最高海拔,并且生命值不会小于等于 \(0\)
输入格式:
输入的第一行包含四个正整数 \(\text{lim}, v, h, x\) \((1 \le \text{lim}, v, h, x \le 10 ^ 9)\)
输出格式:
输出到达龙脊雪山的最高海拔。
输入样例:
5 3 100 2
输出样例:
150
样例解释:
在登山第 \(1\) 秒内累计严寒值 \(5\),超过上限,在第 \(2\) 秒内到第 \(50\) 秒内共受到 \(2 \times 49 = 98\) 点伤害,所以到达龙脊雪山的最高海拔为 \(3 \times 50 = 150\) 米。
STD:
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
cin.tie(0) -> sync_with_stdio(0);
int lim, v, h, x;
cin >> lim >> v >> h >> x;
int lim_t = ceil(sqrt(lim + 4)) - 2;
auto check = [&](int mid) {
return h - (mid - lim_t) * x > 0;
};
int l = 0, r = 2e9;
while (l < r) {
int mid = l + r + 1 >> 1;
if (check(mid)) {
l = mid;
} else {
r = mid - 1;
}
}
cout << l * v << "\n";
}