本文主要是介绍P7072 [CSP-J2020] 直播获奖,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
NOI2130即将举行。为了增加观赏性,CCF决定逐一评出每个选手的成绩,并直播即时的获奖分数线。本次竞赛的获奖率为w% 的选手的最低成绩就是即时的分数线。
更具体地,若当前已评出了 p 个选手的成绩,则当前计划获奖人数为max(1,⌊p∗w%⌋),其中w是获奖百分比,⌊x⌋ 表示对x向下取整,max(x,y) 表示x和y中较大的数。如有选手成绩相同,则所有成绩并列的选手都能获奖,因此实际获奖人数可能比计划中多。
作为评测组的技术人员,请你帮 CCF 写一个直播程序。
输入
第一行有两个整数 n w 分别代表选手总数与获奖率。
第二行有 n个整数,依次代表逐一评出的选手成绩。
输出
只有一行,包含 n个非负整数,依次代表选手成绩逐一评出后,即时的获奖分数线。相邻两个整数间用一个空格分隔。
样例输入
10 60 200 300 400 500 600 600 0 300 200 100
样例输出
200 300 400 400 400 500 400 400 300 300
思路
非常简单的一道题,需要一个人数数组来统计各个分数的人数,从高到低遍历(600~0),一个变量来累加,一旦≥人数限制(提前算好)就输出当前分数
代码
#include <bits/stdc++.h>
using namespace std;
long long n,w,a[100010],tot[610],sum,zb;
int main()
{cin>>n>>w;for(int i=1;i<=n;i++){cin>>a[i];tot[a[i]]++;int num=i*w/100;if(num<1)//特判{zb=1;}else{zb=num;}for(int j=600;j>=0;j--){sum+=tot[j];if(sum>=zb){cout<<j<<" ";break;} }sum=0;}return 0;
}
这篇关于P7072 [CSP-J2020] 直播获奖的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!