Background
从前有个荣光的王国,小 A 是其中的国王,他认为一个国家除了法律外还要有一些约定俗成的规则,所以今天他要赐以其规则。
Description
小 A 制定了一些规则,每条规则有一个代号,代号为不超过 109109 的非负整数。
小 A 的国家有 nn 位居民,每位居民每天会且仅会遵守 11 条规则。小 A 记录了 mm 天里每天每位居民遵守的规则代号。
现在小 A 想要考察代号为 kk 的规则是否符合民意,具体考察方法如下:
- 如果在某一天里,有大于等于一半的人遵守了规则 kk,那么小 A 认为在这一天规则 kk 是符合民意的。
- 如果在大于等于一半的天数里,规则 kk 符合民意,那么他会认为规则 kk 是正确的。否则,他会认为规则 kk 是错误的。
如果小 A 的规则 kk 是正确的,请你输出 YES,否则请你输出 NO。
Input
第一行三个整数 n,m,kn,m,k,分别表示居民总数、记录的天数和小 A 想要考察的规则的代号。
接下来 mm 行,每行 nn 个整数分别表示每个人分别遵守的规则代号。
Output
一行一个字符串 YES 或 NO 表示小 A 的规则 kk 是否是被视作正确的。
Sample 1
| Inputcopy | Outputcopy |
|---|---|
3 2 1 1 1 2 3 1 2 |
YES |
Sample 2
| Inputcopy | Outputcopy |
|---|---|
2 2 1 1 2 2 1 |
YES |
Sample 3
| Inputcopy | Outputcopy |
|---|---|
3 2 1 9 9 8 1 9 9 |
NO |
Hint
样例 1 解释
- 第一天有 22 人遵守 11 号规则,大于总人数的一半,所以第一天小 A 的规则是符合民意的。
- 第二天只有 11 人遵守,小于总人数的一半,不符合民意。
总共有 11 天符合民意,等于天数的一半,所以小 A 认为他的规则是正确的。
样例 2 解释
第一天、第二天分别有 11 个人遵守规则 11,都等于人数的一半,因此这两天小 A 的规则都符合民意,所以小 A 认为他的规则是正确的。
样例 3 解释
- 第一天没有人遵守 11 号规则,所以第一天小 A 的规则是不符合民意的。
- 第二天只有 11 个人遵守 11 号规则,小于总人数的一半,不符合需求。
可见,没有一天 11 号规则是符合需求的,所以小 A 认为他的规则是错误的。
数据范围
- 对于 20%20% 的数据,m=1m=1。
- 对于另外 20%20% 的数据,n=1n=1。
- 对于 100%100% 的数据,1≤n,m≤10001≤n,m≤1000,0≤k≤1090≤k≤109,输入的所有数据 xx 满足 0≤x≤1090≤x≤109。
题解
输入已经告诉你需要判断的规则号,所以我们只要对这一个进行判断,首先一天一天的判断,直接判断该规则号是不是在该一天出现一半以上,最后如果天数也是总天数一半则输出YES,否则输出NO。
代码如下
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m, k;
cin >> n >> m >> k;
int required_days = (m + 1) / 2; // 规则符合民意的天数必须至少为 m/2 向上取整
int valid_days = 0; // 记录符合民意的天数
// 逐天检查每位居民遵守的规则
for (int i = 0; i < m; ++i) {
int count = 0;
for (int j = 0; j < n; ++j) {
int rule;
cin >> rule;
if (rule == k) {
count++;
}
}
// 如果该天有大于等于一半的人遵守规则 k
if (count * 2 >= n) {
valid_days++;
}
}
// 判断规则是否正确
if (valid_days >= required_days) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}

986

被折叠的 条评论
为什么被折叠?



