本题解提供一种桶的写法
思路:
先定义个桶:
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;
}
完结撒花!★,°:.☆( ̄▽ ̄)/$:.°★ 。