题目提供者                一扶苏一  扶咕咕

难度                                普及-

原题网址:点击

题目描述

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

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

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

输入格式

第一行有两个整数 n,w。分别代表选手总数与获奖率。
第二行有 nn个整数,依次代表逐一评出的选手成绩。

输出格式

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


提示

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


讲解

好好审审这题,不难发现,输出即时的分数线肯定是输入一个数就输出一个数,而不是全部输完在统一输出,所以不难想出一种算法:先输入,接着存入数组里,接着按降序排一下序,最后输出最后一个获奖的人。

错误代码:

#include<bits/stdc++.h>
using namespace std;
int main(){int n,w,a[100005],m;cin>>n>>w;for(int i=1;i<=n;i++){cin>>a[i];m=max(1,i*w/100);sort(a,a+i,greater<int>());cout<<a[m]<<" ";}return 0;
}

但是我们会发现,这样的代码,只能获得50分,很明显,原因是超时,因为log时间复杂度是n*log2(n),在乘外部的n,整个时间复杂度是n^2*log2(n),n最大10000,log2(10000)大概是13~14左右,10^4的平方*13已超过10^8,所以会超时,我们应该优化,那应该如何优化呢,我们不能再用这个算法了,需要换一个算法。

看来我们不能用数组来分别存每个人的成绩,那么还有什么办法呢?一定是我们忽略了什么关键信息,然后我们会发现一条至关有用的信息:对于所有测试点,每个选手的成绩均为不超过 600 的非负整数,因为成绩共有600个值,那我们不妨存一个下标有600的数组,每个元素存下标的人数。输入完成绩过后,就把下标为输入的数的元素加一,然后从600到0进行一次循环,再定义一个累加的变量,将每个元素的值加入,如果获奖人数大于或等于(因为有可能分数线上有许多人)预期的获奖人数,就输出下标并结束循环。

这道题其实不难,主要的问题是解决超时的问题,解决超时的问题的办法就是优化,

最终代码+注释

#include<bits/stdc++.h>
using namespace std;
int main(){int x,a[605]={0},n,w,sum;cin>>n>>w;//输入人数和获奖率for(int i=1;i<=n;i++){//循环输入cin>>x;//输入分数a[x]++;//将得x分的人加一sum=0;//先将获奖的人数置为0for(int j=600;j>=0;j--){//计算最后一名获奖的人考了多少分sum+=a[j];//从高到低计算人数if(sum>=max(1,i*w/100)){//直到获奖的人数足够cout<<j<<' ';//输出最后一个获奖的分数break;//提前结束循环}}}return 0;
}

好了,那今天就到这里啦,感谢您的支持,有什么不懂的问题也可以写在评论区里,

我们下期再见吧(◕ᴗ◕✿),拜拜(。◕ˇ∀ˇ◕)

P7072 [CSP-J2020] 直播获奖(详解)相关推荐

  1. 视频直播技术详解(8)直播云 SDK 性能测试模型

    <视频直播技术详解>系列之八:直播云 SDK 性能测试模型 牛小七2016年10月12日发布在 视频直播技术详解 七牛云于 6 月底发布了一个针对视频直播的实时流网络 LiveNet 和完 ...

  2. 视频直播技术详解(7)现代播放器原理

    <视频直播技术详解>系列之七:现代播放器原理 牛小七2016年9月29日发布在 视频直播技术详解 from: http://blog.qiniu.com/archives/7040 七牛云 ...

  3. 视频直播技术详解(0)开篇

    (原标题:<视频直播技术详解>系列之一:开篇) 文|何李石 随着互联网用户消费内容和交互方式的升级,支撑这些内容和交互方式的基础设施也正在悄悄发生变革.手机设备拍摄视频能力和网络的升级催生 ...

  4. 《视频直播技术详解》系列之七:现代播放器原理

    七牛云于 6 月底发布了一个针对视频直播的实时流网络 LiveNet 和完整的直播云解决方案,很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣. 结合七牛实时流网络 LiveNet 和直播云解 ...

  5. 《视频直播技术详解》系列之八:直播云 SDK 性能测试模型

    七牛云于 6 月底发布了一个针对视频直播的实时流网络 LiveNet 和完整的直播云解决方案,很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣. 结合七牛实时流网络 LiveNet 和直播云解 ...

  6. 视频直播技术详解之直播云SDK性能测试模型

    声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载. 作者:七牛云 责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@csdn.net,另有「CSDN 高级架构师群 ...

  7. 视频直播技术详解之现代播放器原理

    声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载. 作者:七牛云 责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@csdn.net,另有「CSDN 高级架构师群 ...

  8. 「视频直播技术详解」系列之六:现代播放器原理

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

  9. 《视频直播技术详解》系列:(4)采集

    原文来自七牛云,感谢原作者. <视频直播技术详解>系列:(0)汇总 采集是整个视频推流过程中的第一个环节,它从系统的采集设备中获取原始视频数据,将其输出到下一个环节.视频的采集涉及两方面数 ...

  10. 移动端实时音视频直播技术详解(一):开篇

    移动端实时音视频直播技术详解(一):开篇 1.引言 随着互联网用户消费内容和交互方式的升级,支撑这些内容和交互方式的基础设施也正在悄悄发生变革.手机设备拍摄视频能力和网络的升级催生了大家对视频直播领域 ...

最新文章

  1. WCF 改成 restful api
  2. 聚类分析在用户行为中的实例_聚类分析在用户分类中的应用
  3. linux c 消息队列简介
  4. 提升vector性能的几个技巧
  5. mybitis第三讲:关联查询
  6. excel如何快速实现数据区域的框选
  7. php信息采集开发,程序php信息采集程序代码
  8. python基本模块中的对象_Python 学习笔记 -- OS模块的常用对象方法
  9. 抓到一只苍蝇 writeup
  10. 泉州经贸职业技术学院计算机系,部门简介-泉州经贸职业技术学院网络电教中心...
  11. 窄带物联网技术有望终结碎片化现状
  12. mongodb入门基本语法
  13. 标注工具: Label Studio
  14. c语言万能编程模板_C语言实现模板
  15. 【BZOJ3097】 Hash Killer I
  16. 《增长黑客》读书笔记
  17. 【项目】#防翟天临老师翻车神器# ——实现文本查重
  18. OSChina 周二乱弹 ——女孩在身上纹了个四叶草
  19. python这个单词的含义是什么_python style是什么意思
  20. 关于用户 email 邮件地址是否允许有加号的问题

热门文章

  1. python频谱分析_基于Python的频谱分析(一)
  2. 已经围上为何不算目_围棋为什么不规定贴7目?
  3. c语言编写按键的中断和查询方式的区别,中断程序和查询方式的区别
  4. 安装PHPstorm
  5. 6 个用于颜色生成的 JavaScript 工具
  6. 小学三年级计算机基础知识教案,小学三年级上册信息技术教案
  7. DVWA攻略-03-SQL显错or 盲注
  8. SpringBoot 中 starts ---场景启动器
  9. malloc和new的区别
  10. 【云原生Docker系列第五篇】Docker数据管理(与其互为人间,不如自成宇宙)