1 条题解

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

    📝 题目大意

    有奇数 NN 个人对提案投票,每人投"赞成(For)"或"反对(Against)"。判断赞成人数是否超过一半,是则输出 Yes,否则输出 No

    💡 解题思路

    1. 题目分析

      • NN119999 之间的奇数(N99N \le 99),数据规模极小,O(N)O(N) 直接模拟即可。
      • 由于 NN 为奇数,不可能出现平局,只需比较赞成票数 aa 和反对票数 bb 的大小即可。
    2. 算法推导

      • 用变量 aa 统计 "For" 的数量,变量 bb 统计 "Against" 的数量。
      • 遍历 NN 个字符串 SiS_i,若 Si="For"S_i = \text{"For"}aa 加一,否则 bb 加一(std.cpp 中第 7-10 行)。
      • a>ba > b,说明赞成超过一半,输出 "Yes";否则输出 "No"(std.cpp 中第 12-13 行)。
    3. 边界与细节

      • N=1N=1:只有一个人,若为 "For"a=1,b=0a=1, b=0,输出 Yes;若为 "Against"a=0,b=1a=0, b=1,输出 No。符合题意。
      • 无需考虑平局情况,因为 NN 为奇数保证了 aabb 必然不相等。

    ⏱️ 复杂度分析

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

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    string s1;
    int n, a, b;  // n: 总人数, a: 赞成票数, b: 反对票数
    int main(){
      cin >> n;  // 读入总人数
      for(int i = 0; i < n; i++){
        cin >> s1;
        if(s1 == "For") a++;  // 统计赞成票
        else b++;             // 统计反对票(由于只有两种取值,else 即 Against)
      }
      if(a > b) cout << "Yes";  // 赞成超过一半则输出 Yes
      else cout << "No";        // 否则输出 No
      return 0;
    }
    
    • 1

    信息

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