AcWing 5616. 上上下下 —— C ++ 有代码注释
原题链接
简单
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int a, b, c, d, k;
cin >> a >> b >> c >> d >> k;
// 首先先存入 a b c d,然后用 k 表示走的总步数
int n1 = k / (a + b), n2 = k / (c + d);
// 计算一下最多可以进行几轮完整的操作
int e1 = k - n1 * (a + b), e2 = k - n2 * (c + d);
// e1 e2 分别表示二者进行最多轮操作之后,剩下的可以进行的步数
int x1, x2;
// 用 x1 x2 分别表示二者当前的位置,注意可正可负
// 每轮操作之后,相对于起始位置的位移都是 (a - b) 或者 (c - d),然后再乘以操作轮数就可以了
// 如果剩余步数大于等于每轮操作中的首次操作步数,最后加上 2 * a(c)- e1(e2) 即可
if (e1 >= a) x1 = n1 * (a - b) + 2 * a - e1;
else x1 = n1 * (a - b) + e1;
if (e2 >= c) x2 = n2 * (c - d) + 2 * c - e2;
else x2 = n2 * (c - d) + e2;
// 位移是矢量,但是我们考虑的是举例,给二者转正,再进行比较就可以了
x1 = abs(x1), x2 = abs(x2);
if (x1 == x2) cout << "Tied" << endl;
else if (x1 > x2) cout << "Nikky" << endl;
else cout << "Byron" << endl;
return 0;
}