1 条题解
-
0
一、题意回顾
比赛分上半场和下半场,核心规则: 同一半场内,任意一支队伍都不能连续打进 3 个球。
给定:
- 上半场比分 (RiOI 队 球,KDOI 队 球)
- 全场最终比分 (下半场 RiOI 队净胜 球,KDOI 队净胜 球)
要求判断:两个半场的比分是否都合法,合法输出 ,否则 。
二、核心结论(关键公式)
对于任意一个半场的比分 : 该比分合法的充要条件为:
只要上半场和下半场的比分都满足这个公式,答案就是 。
三、结论证明
规则:同一半场不能有队伍连续 3 球。 我们分情况讨论:
- 若 且 :无进球,合法。
- 若其中一队得分为 (如 ): 另一队最多只能进 球(不能连续 3 球),即 ,符合公式 。
- 若两队都有进球: 进球顺序可以交替排列(如 、),得分多的队伍,最多只能比得分少的队伍多 2 球,刚好满足公式。
简单理解:得分高的队伍,最多比得分低的队伍多进 2 球,否则必然出现连续 3 球的违规情况。
四、标程代码逻辑解析
完整标程
#include <bits/stdc++.h> using namespace std; int T, a, b, c, d; int main() { for (scanf("%d", &T); T--; ) { scanf("%d%d%d%d", &a, &b, &c, &d), c -= a, d -= b; if (a > b) swap(a, b); if (c > d) swap(c, d); puts((a + 1 << 1) >= b && (c + 1 << 1) >= d ? "YES" : "NO"); } }分步拆解
-
输入处理 读取测试用例数 ,每组读取 。 计算下半场净胜球:
-
统一大小 用
swap保证:- 上半场:
- 下半场: 这样只需判断大值 ≤ 2×小值+2。
-
公式等价简化(核心) 标程用位运算优化公式:
等价于:
(左移 1 位 = ×2)
-
最终判断 上半场、下半场同时合法 → 输出 ,否则 。
五、代码运行示例
以样例输入第四组:
0 100 0 100- 上半场比分 判断: → 不成立
- 直接输出 ,与样例一致。
六、时间复杂度
- 每组测试用例:(常数次判断、运算)
- 总复杂度:
- 空间复杂度:
总结
- 核心判定公式:
- 分别判断上半场和下半场比分是否合法
- 均合法输出 ,否则
- 1
信息
- ID
- 6463
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者