我来灌水题了(巨简单)

2. 分数线

XJOI - 题目ID:15735必做题文件操作100分

最新提交:

Time Limit Exceeded

70 分

历史最高:

Time Limit Exceeded

70 分

时间限制: 1000ms

空间限制: 524288kB

输入文件名: grades.in

输出文件名: grades.out

题目描述

鱼大大所在城市高考改革了!从原来的文综理综变成了7选3,即7门课程任选3门课程参加高考。随着高考的改革,一些大学的录取条件也发生了改变。这不,鱼大大最中意的森林学院的就改了规则:必须要选择生物,且是全省考生的前20%(⌊总人数*20%⌋,至少有1人。如有选手成绩相同,则所有成绩并列的选手都能被录取)!

鱼大大这就犯了难,这不知道分数线,心里没有底呀,这天所有考生的成绩都出来了,鱼大大那是一眼都不敢看呀,羊大大只能勉为其难帮他查看起了排行榜,每个考生的生物成绩都会告诉鱼大大,同时羊大大还会实时把当前的录取分数线也告诉鱼大大。并在最后把最终的分数线和鱼大大是否会被录取都告诉鱼大大。

输入格式

所有输入数据从grades.in文件中读取。

第一行2个整数n,m,分别表示所有考生的人数,和鱼大大的位次(第几个)。

第二行n个整数,为所有考生的成绩

输出格式

所有输出数据输出到grades.out文件

第一行,包含 n 个整数,依次代表考生成绩逐一读出后,当前的录取分数线。

第二行一个整数和一个字符串为最终的录取分数和鱼大大是否会被录取

样例

Input 1

5 3 10 100 30 50 100

Output 1

10 100 100 100 100 100 NO

Input 2

12 5 10 20 30 40 50 20 20 30 40 10 30 40

Output 2

10 20 30 40 50 50 50 50 50 40 40 40 40 YES

样例解释

样例2解释:

共12位考生,鱼大大排在第5位。

读第1位考生成绩,10,此时前20%为1人,输出第一的成绩 10;

读第2位考生成绩,20,此时前20%为1人,输出第一的成绩 20;

读第3位考生成绩,30,此时前20%为1人,输出第一的成绩 30;

读第4位考生成绩,40,此时前20%为1人,输出第一的成绩 40;

读第5位考生成绩,50,此时前20%为1人,输出第一的成绩 50;

读第6位考生成绩,20,此时前20%为1人,输出第一的成绩 50;

读第7位考生成绩,20,此时前20%为1人,输出第一的成绩 50;

读第8位考生成绩,30,此时前20%为1人,输出第一的成绩 50;

读第9位考生成绩,40,此时前20%为1人,输出第一的成绩 50;

读第10位考生成绩,10,此时前20%为2人,输出第二的成绩 40;

读第11位考生成绩,30,此时前20%为2人,输出第二的成绩 40;

读第12位考生成绩,40,此时前20%为2人,输出第二的成绩 40;

最终分数线为40分,鱼大大考了50分,录取,输出YES

分数线.zip

数据范围

对于所有测试点数据,所有考生的成绩均为不超过100的非负整数,1≤m≤n。

测试点1,n = 5,所有考生成绩从低到高排列且各不相同

测试点2,n = 5,所有考生成绩各不相同

测试点3~4,n = 5

测试点5~8,n ≤ 100

测试点9~14,n ≤ 104104

测试点15~20,n ≤ 105105

送解决方案

3 个赞
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,z,a[105];
int main(){
	freopen("grades.in","r",stdin);
	freopen("grades.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>x;
		if(i==m){
			y=x;
		}
		a[x]++;
		int b=max(1,i/5),j;
		for(j=100;j>=0;j--){
			b-=a[j];
			if(b<=0){
				break ;
			}
		}
		cout<<j<<" ";
		if(i==n){
			z=j;	
		}
	}
	cout<<z<<" ";
	if(y>=z){
		cout<<"YES";
	}else{
		cout<<"NO";
	}
	return 0;
}
4 个赞

@周子寓

4 个赞

私信

2 个赞

OK捏

4 个赞

看看这题

2 个赞

这不点赞一哥吗

2 个赞

什么意思

3 个赞