1 条题解

  • 0
    @ 2026-4-7 13:12:53

    一、题意回顾

    比赛分上半场下半场,核心规则: 同一半场内,任意一支队伍都不能连续打进 3 个球

    给定:

    • 上半场比分 a:ba:b(RiOI 队 aa 球,KDOI 队 bb 球)
    • 全场最终比分 c:dc:d(下半场 RiOI 队净胜 cac-a 球,KDOI 队净胜 dbd-b 球)

    要求判断:两个半场的比分是否都合法,合法输出 YES\text{YES},否则 NO\text{NO}


    二、核心结论(关键公式)

    对于任意一个半场的比分 x:yx:y: 该比分合法充要条件为:

    max(x,y)2min(x,y)+2\max(x,y) \le 2\cdot\min(x,y)+2

    只要上半场下半场的比分都满足这个公式,答案就是 YES\text{YES}


    三、结论证明

    规则:同一半场不能有队伍连续 3 球。 我们分情况讨论:

    1. x=0x=0y=0y=0:无进球,合法。
    2. 若其中一队得分为 00(如 x=0x=0): 另一队最多只能进 22 球(不能连续 3 球),即 y2y \le 2,符合公式 max(x,y)2min(x,y)+2\max(x,y) \le 2\cdot\min(x,y)+2
    3. 若两队都有进球: 进球顺序可以交替排列(如 RKRK\text{RKRK}\dotsKKRKKR\text{KKRKKR}\dots),得分多的队伍,最多只能比得分少的队伍多 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");
    	}
    }
    

    分步拆解

    1. 输入处理 读取测试用例数 TT,每组读取 a,b,c,da,b,c,d。 计算下半场净胜球

      c=ca,d=dbc = c-a,\quad d = d-b
    2. 统一大小swap 保证:

      • 上半场:aba \le b
      • 下半场:cdc \le d 这样只需判断大值 ≤ 2×小值+2
    3. 公式等价简化(核心) 标程用位运算优化公式:

      max(x,y)2min(x,y)+2\max(x,y) \le 2\cdot\min(x,y)+2

      等价于:

      (min(x,y)+1)1max(x,y)(\min(x,y)+1) \ll 1 \ge \max(x,y)

      (左移 1 位 = ×2)

    4. 最终判断 上半场、下半场同时合法 → 输出 YES\text{YES},否则 NO\text{NO}


    五、代码运行示例

    以样例输入第四组:0 100 0 100

    1. 上半场比分 0:1000:100 min=0, max=100\min=0,\ \max=100 判断:1002×0+2100 \le 2×0+2不成立
    2. 直接输出 NO\text{NO},与样例一致。

    六、时间复杂度

    • 每组测试用例:O(1)O(1)(常数次判断、运算)
    • 总复杂度:O(T)O(T)
    • 空间复杂度:O(1)O(1)

    总结

    1. 核心判定公式:max(x,y)2min(x,y)+2\boldsymbol{\max(x,y) \le 2\cdot\min(x,y)+2}
    2. 分别判断上半场下半场比分是否合法
    3. 均合法输出 YES\text{YES},否则 NO\text{NO}
    • 1

    信息

    ID
    6463
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者