【刷题笔记】2020 CSP-J

2020 CSP-J 题目整理

B-直播获奖

思路梳理

题目中说“如有选手成绩相同,则所有成绩并列的选手都能获奖,因此实际获奖人数可能比计划中多”,这是一个坑点,因为即使有分数相同的人,他的分数也是和位于第 nw% 人的分数相同的,而题目只让输出分数,所以不用在意。先来考虑暴力算法,没加进去一个人就拍一次序,然后输出第 max(nw%,1) 的成绩,时间复杂度为 O(n2logn) 还是会炸,但是注意题目中的特殊性质"每个选手的成绩均为不超过600的非负整数",那么为什么不开一个桶呢,其中 f[i] 记录分数为 i 的人的个数,这样只需要从 600 倒序循环到 0 ,只要人数总和一大于限制,就 break 然后输出此时的分数

代码实现

#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;
}
posted @   GuoSN0410  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示