问题 H: 比赛
题目描述
小 X 参加了一场作文比赛的初赛。算上小 X,他的学校一共有 n 个人参加了这场比赛。一个礼拜后,小 X 兴奋地打开比赛官网,发现一等奖、二等奖、三等奖的分数线和所有人的得分都已经公布了,但没有提到获得什么奖项才能进入复赛。小 X 想问问你,如果要获得了 A 等奖才能进入复赛的话,他的学校有多少人能进入复赛呢?
假设 A 等奖的分数线是 x,一个人的分数是 y,那么如果 y 大于等于 x,这个人就获得了 A 等奖。
输入
输入数据共有四行。
第一行一个正整数 n,表示小 X 的学校一共有 n 个人参加了比赛。
第二行 n 个正整数,表示小 X 的学校中所有人的得分。
第三行三个正整数 L3,L2,L1,分别表示三等奖、二等奖、一等奖的分数线。
第四行一个正整数 A,表示要获得了 A 等奖才能进入复赛。
输出
输出一行包含一个整数,表示有多少人进入复赛。
样例输入
4
99 101 200 300
100 200 300
2
样例输出
2
提示
样例解释
第一个人 99 分,没有奖项
第二个人 101 分,获得了三等奖
第三个人 200 分,获得了三等奖、二等奖
第四个人 300 分,获得了三等奖、二等奖、一等奖
一共有 2 个人获得了二等奖,所以有 2 个人进入复赛
数据范围
本题共有 10 个测试点,每个测试点 8 分
对于全部数据:所有人的得分<=1000,L3<=L2<=L1<=1000,A 是{1,2,3}中的一个
对于测试点 1-2 :n=1 对于测试点 3-6 :n<=10
对于测试点 7-10:n<=10000
解题思路:
又是一道签到题。只需模拟一下过程,计算一二三等奖获奖的人数,根据题意输出即可。
(感觉这道题比较扯的是可以同时拿多个奖,拿了一等奖就肯定也获得了二三等奖,这就是签到的魅力吧)
AC代码:
#include <iostream>
using namespace std;
int x[100010];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>x[i];
int l3,l2,l1;
cin>>l3>>l2>>l1;
int a;
cin>>a;
int res1=0,res2=0,res3=0;
for(int i=1;i<=n;i++)
{
if(x[i]>=l1) res1++; //一等奖 人数
if(x[i]>=l2) res2++; //二等奖 人数
if(x[i]>=l3) res3++; //三等奖 人数
}
if(a==1)
cout<<res1;
if(a==2)
cout<<res2;
if(a==3)
cout<<res3;
}