首页 > 编程语言 >南沙C++信奥赛陈老师解一本通题 2005:【20CSPJ普及组】直播获奖

南沙C++信奥赛陈老师解一本通题 2005:【20CSPJ普及组】直播获奖

时间:2024-09-30 14:45:40浏览次数:6  
标签:w% 600 int 信奥赛 C++ 获奖 选手 通题 100

 【题目描述】

NOI2130 即将举行。为了增加观赏性,CCF 决定逐一评出每个选手的成绩,并直播即时的获奖分数线。本次竞赛的获奖率为 w%w%,即当前排名前 w%w% 的选手的最低成绩就是即时的分数线。

更具体地,若当前已评出了 pp 个选手的成绩,则当前计划获奖人数为 max(1,⌊p∗w%⌋)max(1,⌊p∗w%⌋),其中 ww 是获奖百分比,⌊x⌋⌊x⌋ 表示对 xx 向下取整,max(x,y)max(x,y) 表示 xx 和 yy 中较大的数。如有选手成绩相同,则所有成绩并列的选手都能获奖,因此实际获奖人数可能比计划中多。

作为评测组的技术人员,请你帮 CCF 写一个直播程序。

【输入】

第一行有两个整数 n,wn,w。分别代表选手总数与获奖率。

第二行有 nn 个整数,依次代表逐一评出的选手成绩。

【输出】

只有一行,包含 nn 个非负整数,依次代表选手成绩逐一评出后,即时的获奖分数线。相邻两个整数间用一个空格分隔。

【输入样例】

10 60
200 300 400 500 600 600 0 300 200 100

【输出样例】

200 300 400 400 400 500 400 400 300 300

【提示】

样例 1 解释:

已评测选手人数 1 2 3 4 5 6 7 8 9 10
计划获奖人数 1 1 1 2 3 3 4 4 5 6
已评测选手的分
数从高到低排列
(其中,分数线
粗体标出)
200 300
200
400
300
200
500
400
300
200
600
500
400
300
200
600
600
500
400
300
200
600
600
500
400
300
200
0
600
600
500
400
300
300
200
0
600
600
500
400
300
300
200
200
0
600
600
500
400
300
300
200
200
100
0

 

注意,在第9名选手的成绩评出之后,计划获奖人数为5人,但由于有并列,实际会有6人获奖。

输入样例2:

10 30
100 100 600 100 100 100 100 100 100 100

 

输出样例2:

100 100 600 600 600 600 100 100 100 100

 

数据规模与约定:

各测试点的 nn 如下表:

测试点编号 n=n=
1∼3 10
4∼6 500
7∼10 2000
11∼17 104104
18∼20 105105

 

对于所有测试点,每个选手的成绩均为不超过 600600 的非负整数,获奖百分比 ww 是一个正整数且 1≤w≤991≤w≤99。

提示:

在计算计划获奖人数时,如用浮点类型的变量(如 C/C++ 中的 float 、 double,Pascal 中的 real 、 double 、 extended 等)存储获奖比例 w%w%,则计算 5×60%5×60% 时的结果可能为 3.0000013.000001,也可能为 2.9999992.999999,向下取整后的结果不确定。因此,建议仅使用整型变量,以计算出准确值。

 

#include <bits/stdc++.h>
using namespace std;
int a[601];//桶原理 a[i]表示有多少个人是该分数 
int findLine(int people) //从高分向低分查找前people个人,那分数即为分数线 
{
	int cnt=0;
	for(int i=600;i>=0;i--)
	{
		if(a[i]==0)
			continue;
		if(cnt+a[i]>=people)
			return i;//此分数线
		else
			cnt+=a[i];//把前a[i]人加进去 
	}
	return 0;
}
int main()
{
	int n,w,people=1,score;
	cin>>n>>w;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&score);  //要换成scanf 否则有3个不通过 
		a[score]++;
		float tmp=i*w/100.0;
		people=max(1, (int)floor(tmp) );
		printf("%d ",findLine(people ));
	}
	
	return 0;
}

 

标签:w%,600,int,信奥赛,C++,获奖,选手,通题,100
From: https://www.cnblogs.com/nanshaquxinaosai/p/18441815

相关文章

  • 南沙C++信奥赛陈老师解一本通题1965:【14NOIP普及组】珠心算测验
    ​ 【题目描述】珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不......
  • C++入门
    第1节:开发环境的搭建与配置1.1目标在本节课中,学生将学习如何在Windows上搭建一个现代化的C++开发环境,并使用VSCode和CMake工具进行C++程序的开发与调试。学生将掌握以下内容:安装VSCode及C++插件安装MinGW或其他C++编译器安装并配置CMake创建并编译第一个C++项目使用VSCod......
  • 南沙C++信奥赛陈老师解一本通题:1945:【09NOIP普及组】多项式输出
    ​ 【题目描述】一元 nn 次多项式可用如下的表达式表示: f(x)=anxn+an−1xn−1+...+a1x+a0,an≠0f(x)=anxn+an−1xn−1+...+a1x+a0,an≠0 其中,aixii 称为i次项,ai称为ii次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:1.多项式中......
  • 分享C++程序员面试八股文(十四)
    以下是C++常见八股文(十四):一、C++中的智能指针高级用法(AdvancedUsageofSmartPointers)解释unique_ptr、shared_ptr和weak_ptr的循环引用问题及解决方法循环引用问题:当使用shared_ptr进行相互引用时,可能会导致循环引用问题。例如,两个对象相互持有对方的shared_pt......
  • c++:引用
    一、引用概念是什么?引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"类型&引用变量名(对象名)=引用实体;voidTestRef(){inta=10;int......
  • C++发邮件:如何轻松实现邮件自动化发送?
    C++发邮件的详细步骤与教程指南?如何在C++中发邮件?无论是定期发送报告、通知客户还是管理内部沟通,自动化邮件系统都能显著提升工作效率。AokSend将详细介绍如何使用C++发邮件,实现邮件自动化发送,帮助您轻松管理邮件通信。C++发邮件:配置环境在选择了合适的C++发邮件库之后,接下......
  • 南沙C++信奥赛陈老师解一本通题 1269:【例9.13】庆功会
    ​ 【题目描述】为了庆贺班级在校运动会上取得全校第一名成绩,班主任决定开一场庆功会,为此拨款购买奖品犒劳运动员。期望拨款金额能购买最大价值的奖品,可以补充他们的精力和体力。【输入】第一行二个数n(n≤500),m(m≤6000),其中n代表希望购买的奖品的种数,m表示拨款金额。接......
  • C++ struct和class的异同、C中和C++中struct的异同
    一、前言C++中的struct结构体和C语言中的struct结构体差异较大。C++中的struct结构体和C++中的class类极为相似。二、C++的struct和class1.相同点      (1)成员     struct和class都可以在主体中定义成员变量和成员函数!两者在定义成员变量和成员函数上......
  • C++ string的基本运用详细解剖
    string的基本操作一.与C语言中字符串的区别二.标准库中的string三.string中常用接口的介绍1.string中常用的构造函数2.string类对象的容量操作函数3.string类对象的访问及遍历操作4.string类对象的修改操作5.string类的非成员函数6.string中的其他一些操作一.与C语言......
  • AVLTree【c++实现】
    目录AVL树1.AVL树的概念2.AVLTree节点的定义3.AVLTree的插入4.AVLTree的旋转4.1左单旋4.2右单旋4.3左右双旋4.4右左双旋5.AVLTree的验证6.AVLTree的性能AVL树AVLTree的代码实现连接:AVLTree代码链接1.AVL树的概念学习了二叉搜索树之后,我们知道二叉搜索树虽可以......