社区讨论
站外题求助 约为橙题难度
题目总版参与者 5已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @mch7o784
- 此快照首次捕获于
- 2025/06/29 13:10 8 个月前
- 此快照最后确认于
- 2025/11/04 06:53 4 个月前
rt
有 N 个人生活在某个不知名的小国,每个人都有一些积蓄,一开始每个人的积蓄分别为 。
国王想要推行共同富裕的政策。他认为如果一位居民的积蓄至少为 X,那么他就是富裕的。
为了增加富裕人口的数量,国王开始推行一项改革,方式如下:
选择一部分居民(可以是所有居民):
拿走这些居民的全部积蓄,并将这些积蓄在所选的居民当中平分。
例如:如果所有居民的积蓄分别为 [5,1,2],国王选择第一位和第三位居民进行改革,那么他们的财富值将会变成 [3.5,1,3.5]。
国王现在想知道,在他进行任意次(可以是 0 次)改革之后,最多能够出现多少位富裕的居民?
多组数据,n的和不超过1e5,其余数字不超过1e9。
我的思路:贪心,题目可以转化成选择y个人,使得其拥有的钱数 ,求 的最大值。
代码:
CPP#include<bits/stdc++.h>
using namespace std;
int t,n,k,a[200010];
int main(){
freopen("treasure.in","r",stdin);
freopen("treasure.out","w",stdout);
cin>>t;
while(t--){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
int sum=0,ans=0;
for(int i=n;i>=1;i--){
ans++;
if((sum+a[i])<ans*k){
ans--;
break;
}
sum+=a[i];
}
cout<<ans<<'\n';
}
return 0;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...