题解 CF158A 【Next Round】

本题解提供一种桶的写法

思路:

先定义个桶:

int a[105];

注意:桶的大小是根据 $a[i]$ 的数据范围来的,本题 $a[i]$ 最大只有100

把输入存到桶里:

for(int i=1;i<=n;i++){
    cin>>t;
    a[t]++;
}

从大到小枚举,只要参赛人数一够就输出,结束:

for(int i=100;i>=1;i--){
    if(a[i]){//有人得i分
        k-=a[i];
        cnt+=a[i];//cnt是晋级人数
        if(k<=0){
            cout<<cnt;//输出
            return 0;//结束
        }
    }
}

AC CODE:

#include<iostream>
using namespace std;
int n,cnt,k,a[105],t;
int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>t;
        a[t]++;//存桶
    }
    for(int i=100;i>=1;i--){
        if(a[i]){//有人得i分
            k-=a[i];
            cnt+=a[i];//cnt是晋级人数
            if(k<=0){
                cout<<cnt;//输出
                return 0;//结束
            }
        }
    }
    cout<<cnt;
}

完结撒花!★,°:.☆( ̄▽ ̄)/$:.°★


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值