1 条题解

  • 0
    @ 2026-6-19 10:30:15

    📝 题目大意

    有三道题,分值分别为 1、2、4 分。给定高桥君的得分 AA 和青木君的得分 BB。すぬけ君能解出两人中至少有一人解出的题目,求すぬけ君的得分。由于每题分值都是 2 的幂,每个人的得分唯一对应其解出的题目集合,答案也唯一确定。

    💡 解题思路

    1. 题目分析

      • 0A,B70 \leq A, B \leq 7,即所有可能的得分组合(三道题全错 0 分到全对 7 分)。
      • 三道题的分值分别为 1,2,41, 2, 4,恰好对应二进制三个 bit 位的权值。因此 AABB 实际上用一个 3-bit 二进制数编码了每个人的解题情况。
      • すぬけ君能解出"至少有一人解出"的题目,这等价于集合的"并集"操作。
    2. 算法推导

      • すぬけ君的得分 = 高桥君和青木君解题集合的并集所对应的分数。
      • 在二进制视角下,"至少一人解出"就是按位或(bitwise OR):如果某个 bit 位上任意一人为 1,结果就是 1。
      • 因此答案即为 ABA \mid B(按位或)。
      • std.cpp 的实现没有直接使用 | 运算符,而是从高位到低位逐位判断
        • 先看 4 分的题目(二进制最高位):若 a >= 4b >= 4,则结果 c 加上 4,并将满足条件者的分数减去 4,消除高位影响。
        • 再看 2 分的题目:若当前 a >= 2b >= 2,则 c 加上 2,同理减去 2。
        • 最后看 1 分的题目:若 a >= 1b >= 1,则 c 加上 1。
      • 本质与 a | b 完全等价,但用条件判断显式地模拟了位运算过程,适合不熟悉位运算的初学者理解。
    3. 边界与细节

      • A=B=0A = B = 0:两人都没解出任何题,任意条件都不满足,c = 0,输出 0。
      • 最大值 A=B=7A = B = 7:所有条件都满足,c = 4 + 2 + 1 = 7,即三题全对。
      • 注意 std.cpp 中减法操作是为了"消费"掉已处理的分数,避免低位判断时高位分数产生干扰。例如 A=5A = 5(即 4+1),先处理 4 → a 变为 1,再处理 2 → 不满足,最后处理 1 → 满足,正确计入。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅进行常数次条件判断与算术运算。
    • 空间复杂度O(1)O(1),仅使用几个整型变量。

    💻 标准代码 (C++)

    #include <bits/stdc++.h>
    using namespace std;
    
    signed main () {
    	int a, b, c = 0;                  // c 用于累加すぬけ君的得分
    	scanf("%d%d", &a, &b);
    	// 从高位到低位依次检查三道题(分值 4, 2, 1)
    	// 若两人中至少一人解出了当前分值的题,すぬけ君也能解出
    	if (a >= 4 || b >= 4) {           // 检查 4 分的题
    		c += 4;                       // すぬけ君得到 4 分
    		if (a >= 4) a -= 4;           // 消除高桥君已处理的 4 分
    		if (b >= 4) b -= 4;           // 消除青木君已处理的 4 分
    	}
    	if (a >= 2 || b >= 2) {           // 检查 2 分的题
    		c += 2;
    		if (a >= 2) a -= 2;
    		if (b >= 2) b -= 2;
    	}
    	if (a >= 1 || b >= 1) {           // 检查 1 分的题
    		c += 1;
    		if (a >= 1) a -= 1;
    		if (b >= 1) b -= 1;
    	}
    	printf("%d", c);                  // 输出すぬけ君的得分
    	return 0;
    }
    
    • 1

    信息

    ID
    636
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者