【刷题笔记】2020 CSP-J
2020 CSP-J 题目整理
B-直播获奖
思路梳理
题目中说“如有选手成绩相同,则所有成绩并列的选手都能获奖,因此实际获奖人数可能比计划中多”,这是一个坑点,因为即使有分数相同的人,他的分数也是和位于第 人的分数相同的,而题目只让输出分数,所以不用在意。先来考虑暴力算法,没加进去一个人就拍一次序,然后输出第 的成绩,时间复杂度为 还是会炸,但是注意题目中的特殊性质"每个选手的成绩均为不超过600的非负整数",那么为什么不开一个桶呢,其中 记录分数为 的人的个数,这样只需要从 倒序循环到 ,只要人数总和一大于限制,就 然后输出此时的分数
代码实现
#include<bits/stdc++.h>
#define maxn 1000
using namespace std;
int n,w;
int cnt[maxn];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>w;
for(int i=1;i<=n;i++){
int x,tot=0;
cin>>x;
++cnt[x];
for(int j=600;j>=0;j--){
tot+=cnt[j];
if(tot>=max(i*w/100,1)){
cout<<j<<' ';
break;
}
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】