ules 洛谷 - B4012

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

InputcopyOutputcopy
3 2 1
1 1 2
3 1 2
YES

Sample 2

InputcopyOutputcopy
2 2 1
1 2
2 1
YES

Sample 3

InputcopyOutputcopy
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值