AT_arc070_b
思路:
这题就是求在某个集合里,去掉 ans++,最后输出
那怎么计算出可有可无数呢?为了使可有可无数最多,集合里的所有数的和就要尽可能越大,所以应该从大到小排序,再用 ans++。
代码:
#include<bits/stdc++.h>
using namespace std;
const int Max=1e5+5;
int n,k,ans;
long long sum;//计算每个集合的和
int a[Max];
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];//输入
sort(a+1,a+n+1);//排序
for(int i=n;i;i--)//从大到小计算
if(sum+a[i]>=k) ans=0;//sum大于等于k,ans就归零
else{
sum+=a[i];//和加上a[i]
ans++;//可有可无数加一
}
cout<<ans;//输出
return 0;
}