Background
从前有个荣光的王国,小 A 是其中的国王,他认为一个国家除了法律外还要有一些约定俗成的规则,所以今天他要赐以其规则。
Description
小 A 制定了一些规则,每条规则有一个代号,代号为不超过 109109 的非负整数。
小 A 的国家有 n 位居民,每位居民每天会且仅会遵守 1 条规则。小 A 记录了 m 天里每天每位居民遵守的规则代号。
现在小 A 想要考察代号为 kk 的规则是否符合民意,具体考察方法如下:
- 如果在某一天里,有大于等于一半的人遵守了规则 k,那么小 A 认为在这一天规则 k 是符合民意的。
- 如果在大于等于一半的天数里,规则 k 符合民意,那么他会认为规则 k 是正确的。否则,他会认为规则 k 是错误的。
如果小 A 的规则 k 是正确的,请你输出 YES
,否则请你输出 NO
。
Input
第一行三个整数 n,m,kn,m,k,分别表示居民总数、记录的天数和小 A 想要考察的规则的代号。
接下来 m 行,每行 n 个整数分别表示每个人分别遵守的规则代号。
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 解释
- 第一天有 2 人遵守 1 号规则,大于总人数的一半,所以第一天小 A 的规则是符合民意的。
- 第二天只有 1 人遵守,小于总人数的一半,不符合民意。
总共有 1 天符合民意,等于天数的一半,所以小 A 认为他的规则是正确的。
样例 2 解释
第一天、第二天分别有 1 个人遵守规则 1,都等于人数的一半,因此这两天小 A 的规则都符合民意,所以小 A 认为他的规则是正确的。
样例 3 解释
- 第一天没有人遵守 1 号规则,所以第一天小 A 的规则是不符合民意的。
- 第二天只有 1 个人遵守 11 号规则,小于总人数的一半,不符合需求。
可见,没有一天 1 号规则是符合需求的,所以小 A 认为他的规则是错误的。
数据范围
- 对于 20% 的数据,m=1。
- 对于另外 20% 的数据,n=1。
- 对于 100% 的数据,1≤n,m≤1000,0≤k≤109,输入的所有数据 xx 满足 0≤x≤109。
解决方案
输入已知需要判断的规则号,我们只需对这一个进行判断,首先一天一天的判断,直接判断该规则号是不是在该一天出现一半以上,注意这一题的一半要精确到小数,如果出现一半,则天数加一,最后如果天数也是总天数一半则输出YES,否则输出NO。代码如下:
#include <iostream>
using namespace std;
int main()
{
int n, m, k;
cin >> n >> m >> k;
int t = 0;
for (int i = 0; i < m; i++)
{
int num = 0;
for (int j = 0; j < n; j++)
{
int d;
cin >> d;
if (d == k)
num++;
}
if (num >= n / 2.)
t++;
}
if (t >= m / 2.)
cout << "YES\n";
else
cout << "NO\n";
return 0;
}
标签:一半,rules,int,遵守,规则,符合,民意
From: https://blog.csdn.net/2301_80020275/article/details/145301437