1 条题解
-
0
📝 题目大意
有奇数 个人对提案投票,每人投"赞成(For)"或"反对(Against)"。判断赞成人数是否超过一半,是则输出
Yes,否则输出No。💡 解题思路
-
题目分析:
- 是 到 之间的奇数(),数据规模极小, 直接模拟即可。
- 由于 为奇数,不可能出现平局,只需比较赞成票数 和反对票数 的大小即可。
-
算法推导:
- 用变量 统计
"For"的数量,变量 统计"Against"的数量。 - 遍历 个字符串 ,若 则 加一,否则 加一(std.cpp 中第 7-10 行)。
- 若 ,说明赞成超过一半,输出
"Yes";否则输出"No"(std.cpp 中第 12-13 行)。
- 用变量 统计
-
边界与细节:
- :只有一个人,若为
"For"则 ,输出Yes;若为"Against"则 ,输出No。符合题意。 - 无需考虑平局情况,因为 为奇数保证了 与 必然不相等。
- :只有一个人,若为
⏱️ 复杂度分析
- 时间复杂度:,只需遍历一次所有字符串。
- 空间复杂度:,仅使用常数个变量。
💻 标准代码 (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
- 上传者