一个比赛有一百人进入决赛,但是需要经过两轮初赛的选拔。初赛的最终结果由两场初赛产生,不幸的是初赛的最终排名被丢失了。
在每场初赛中,参赛者的排名按非升序排序。当两位参赛者的成绩一样,参赛编号更小的靠前。
现在只知道如下信息:
- 第一场初赛中,第一百名的成绩为 \(a\) 。且第一场初赛中前一百名的选手在第二场初赛中至少取得了 \(b\) 的成绩。
- 第二场初赛中,第一百名的成绩为 \(c\) 。且第一场初赛中前一百名的选手在第二场初赛中至少取得了 \(d\) 的成绩。
在两场初赛过后,所有参赛者按照两场比赛的成绩总分非升序排序,当成绩总分一样,按编号更小靠前。进入决赛的分数线是初赛最终排名第 \(100\) 名的总分。
给出 \(a, b ,c, d\) 。询问分数线最低可能是多少。
观察:第一场比赛中 \(rk100\) 的选手最低分数为 \(a + b\) ,第二场比赛中 \(rk100\) 的选手最低分数为 \(c + d\) 。这是唯一可以得到的信息。
显然有:第一场初赛中 \(rk100\) 最坏会排到 \(rk200\) ,第二场初赛中 \(rk100\) 最坏会排到 \(rk200\) 。于是最坏情况下 \(rk199 = max(a + b, c + d)\) , \(rk200 = min(a + b, c + d)\) 。
假设最低分数线为 \(k\) ,显然 \(rk1 \sim rk198\) 的成绩都为 \(k\) 可以使得 \(rk100\) 的分数线最低。
#include <bits/stdc++.h>
typedef long long ll;
void solve(){
int a, b, c, d; std::cin >> a >> b >> c >> d;
std::cout << std::max(a + b, c + d) << '\n';
}
int main() {
int _ = 1; std::cin >> _;
while (_--) {solve();}
return 0;
}
顺带有,\(rk1 \sim rk198\) 的成绩都为满分可以使 \(rk100\) 的分数线最高。
- Elimination Codeforces Olympiad Moscow Roundelimination codeforces olympiad moscow round elimination codeforces div round elimination codeforces technocup informatics codeforces olympiad napoleon codeforces gorillas moscow 1793d elimination technocup arrays round educational codeforces round rated codeforces round 911 div codeforces round 864 div codeforces round 887 div