[语言月赛 202408] 游戏与共同语言 的题解
记住只在没有思路时使用题解,不要从它复制粘贴代码。请尊重题目和题解的作者。
在解题之前提交题解的代码会导致封禁。
在解题之前提交题解的代码会导致封禁。
作者:
概述
本题要求根据胜局数、净胜数、平局记录数三条规则,判断战队 A 与战队 B 谁的排名更靠前,并输出对应字符。核心解法是按照规则的优先级依次比较三个指标,直到分出高下。
分析
核心观察
排名比较可以看作按胜局数、净胜数、平局记录数三个关键字依次比较:前两个关键字大者排名靠前,第三个关键字小者排名靠前;题目保证不会出现三个指标都相同的情况。
思路
依次比较:
- 若
,胜局数高者排名靠前;
- 若
而
,净胜数高者排名靠前;
- 若胜局数与净胜数均相同,平局记录数低者排名靠前(此时由题意保证
)。
等价地,可比较三元组 的字典序,字典序大者排名靠前。
具体示例
以样例为例:,胜局数相同;再比较净胜数,
,战队 B 净胜数更高,故 B 排名靠前,输出 B。
算法步骤
- 读入 A 的三个指标
wa、ca、ta与 B 的三个指标wb、cb、tb。 - 若
wa与wb不等,胜局数大者胜出。 - 否则若
ca与cb不等,净胜数大者胜出。 - 否则比较平局记录数,
ta小者胜出。 - 输出胜出战队对应的字符
A或B。
复杂度分析
时间:
空间:
实现注意事项
- 三个指标最大可达
,C++ 中建议使用 long long 类型存储。
- 注意第三条规则是平局记录数低者排名靠前,比较方向与前两条相反。
- 题目保证不存在三项指标完全相同的情况,无需处理并列。
源代码
#include <bits/stdc++.h>
using namespace std;
int main() {
long long wa, ca, ta, wb, cb, tb;
cin >> wa >> ca >> ta;
cin >> wb >> cb >> tb;
char ans;
if (wa != wb) {
ans = wa > wb ? 'A' : 'B';
} else if (ca != cb) {
ans = ca > cb ? 'A' : 'B';
} else {
ans = ta < tb ? 'A' : 'B';
}
cout << ans << '\n';
return 0;
}
wa, ca, ta = map(int, input().split())
wb, cb, tb = map(int, input().split())
if wa != wb:
ans = 'A' if wa > wb else 'B'
elif ca != cb:
ans = 'A' if ca > cb else 'B'
else:
ans = 'A' if ta < tb else 'B'
print(ans)
评论