求助大佬!悬赏关注(小号大号一起关)!
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,zero_num;
priority_queue<int,vector<int>,greater<int> >nat;
priority_queue<int>neg;
signed main()
{
cin>>n>>k;
k=pow(2,k-1);
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(x>0)
nat.push(x);
else if(x==0)
zero_num++;
else
neg.push(x);
}
int sum=0;
for(int i=1; ;i++)
{
if(!nat.empty()&&!neg.empty())
{
int z=nat.top(),f=neg.top();
if(sum+z<k)
{
sum+=z;
nat.pop();
}
else if(sum+f>=k)
{
sum+=f;
neg.pop();
}
else
{
cout<<i-1+zero_num;
break;
}
}
else if(!nat.empty()&&neg.empty())
{
sum+=nat.top();
nat.pop();
if(sum>=k)
{
cout<<i-1+zero_num;
break;
}
}
else if(nat.empty()&&!neg.empty())
{
sum+=neg.top();
neg.pop();
if(sum<k)
{
cout<<i-1+zero_num;
break;
}
}
else if(nat.empty()&&neg.empty())
{
cout<<n;
break;
}
}
return 0;
}