1 条题解

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

    📝 题目大意

    给定一个长度为 1616 的由 01 组成的字符串 SS,判断 SS 的所有偶数位(第 2,4,6,,162, 4, 6, \dots, 16 位)是否全为 0。若是则输出 Yes,否则输出 No

    💡 解题思路

    1. 题目分析:字符串长度固定为 1616,数据量极小。核心任务就是检查 SS 中下标为 2,4,,162, 4, \dots, 16(即 C++ 中 00 起始的索引 1,3,,151, 3, \dots, 15)的字符是否全部为 '0'
    2. 算法推导:在 00 起始的字符串中,偶数位对应索引 1,3,5,,151, 3, 5, \dots, 15(即奇数索引)。用一个循环遍历这些位置:for (int i = 1; i < 16; i += 2)。若发现 s[i] == '1',直接输出 "No" 并提前结束程序(return 0);若循环结束仍未发现 '1',则输出 "Yes"
    3. 边界与细节:注意字符串下标从 00 开始,题目中的"第 ii 个字符"是 11 起始的。另外要注意,一旦找到不符合条件的字符就立即输出 No 并退出,不要继续遍历,这样可以避免多余的工作。位置 11 不在检查范围内(题目要求从 22 开始),所以循环从 i=1i=1 起步。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1)——字符串长度固定为 1616,最多检查 88 个位置。
    • 空间复杂度O(1)O(1)——仅使用一个长度为 1616 的字符串变量。

    💻 标准代码 (C++)

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string s;
        cin >> s;                          // 读取长度为 16 的二进制字符串
        for (int i = 1; i < 16; i += 2) {  // 遍历偶数位(1 起始的第 2,4,...,16 位,对应 0 起始的索引 1,3,...,15)
            if (s[i] == '1') {             // 若某个偶数位为 '1',则不满足条件
                cout << "No" << endl;
                return 0;                  // 提前结束程序
            }
        }
        cout << "Yes" << endl;             // 所有偶数位均为 '0'
        return 0;
    }
    
    • 1

    信息

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