1 条题解

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

    📝 题目大意

    给定一个长度为 NN、仅由 o-x 组成的字符串 SS,判断是否同时满足:(1) 至少有一个 o;(2) 没有 x。满足输出 Yes,否则输出 No

    💡 解题思路

    1. 题目分析N100N \le 100,数据量极小,直接遍历字符串即可。核心是检查两个布尔条件:是否存在 o 以及是否存在 x
    2. 算法推导
      • 定义两个布尔变量 hasGoodhasBad,初始均为 false
      • 遍历字符串 SS 的每个字符 c
        • c == 'o',将 hasGood 置为 true
        • c == 'x',将 hasBad 置为 true
      • 遍历结束后,若 hasGood == truehasBad == false,输出 "Yes";否则输出 "No"
    3. 边界与细节
      • 全为 - 的情况:hasGoodfalse,应输出 No(样例 2)。
      • 仅有 o 的情况:hasGoodtruehasBadfalse,应输出 Yes(样例 3)。
      • 存在 x 的情况:无论是否有 o,只要 hasBadtrue 就输出 No(样例 4)。
      • 注意条件判断:必须是 hasGood && !hasBad,不能只检查其中之一。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),遍历字符串一次。
    • 空间复杂度O(1)O(1),仅使用常数个辅助变量。

    💻 标准代码 (C++)

    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
        int N;
        string S;
        cin >> N >> S;
        bool hasGood = false;  // 是否存在 "良" (o)
        bool hasBad = false;   // 是否存在 "不可" (x)
    
        for (char c : S) {
            if (c == 'o') hasGood = true;  // 标记有 "良"
            if (c == 'x') hasBad = true;   // 标记有 "不可"
        }
        // 合格条件:至少一个 "良" 且没有 "不可"
        if (hasGood && !hasBad) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
        return 0;
    }
    
    • 1

    信息

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