2020牛客寒假算法基础集训营5.I——I题是个签到题【签到题】

题目传送门


题目描述

经过2019一年的比赛,牛牛战队的队员发现了一个重大规律:I题是个签到题!

签到题的定义是:通过人数大于等于全场人数的80%或者通过人数是所有题目前三多的题(也就是最多有两个题目通过人数严格比它多)叫做签到题。

2020赛季就要到了,牛牛战队要去验证这个规律了,已知现在每个题的过题情况,看一看I题是不是一个签到题。

输入描述:

输入数据共2行。第一行包括两个整数 n , m ( 9 n 13 , 100 m 1 000 ) n,m(9 \leq n \leq 13, 100 \leq m \leq 1\,000) ,表示比赛的总题数和比赛的总人数。

第二行包括以空格分隔的n个整数 a 1 , a 2 , , a n ( a i > 0 ) a_1,a_2,\cdots,a_n(a_i > 0) ,表示每个题通过的人数。


输出描述:

如果I题是个签到题,则输出Yes,否则输出No。(不区分大小写)


输入

9 100
100 100 100 100 100 100 100 100 100


输出

Yes


题解

  • 排个序找一下即可,简单
  • 也可以直接排序之后判断是否大于等于 a [ 3 ] . v a l a[3].val 即刻

AC-Code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn = 1e5 + 7;

struct Node {
	int i;
    double val;
}a[maxn];
bool cmp(Node a, Node b) {
	return a.val > b.val;
}
int main() {
	int n, m;	while (cin >> n >> m) {
		for (int i = 0; i < n; ++i) {
			cin >> a[i].val;
			a[i].i = i + 1;
		}
        double score_9 = a[8].val;
		sort(a, a + n, cmp);
		bool flag = true;
        int cnt = 0;
		for(int i = 0; i < n && flag; ++i){
            if(a[i].i == 9){
                if(a[i].val * 100 >= m * 80 || cnt < 3)    flag = true;
                else    flag = false;
                break;
            }
            if(a[i].val != score_9)    ++cnt;
        }
		cout << (flag ? "Yes" : "No") << endl;
	}
	return 0;
}
发布了184 篇原创文章 · 获赞 112 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Q_1849805767/article/details/104305284