E. 我要打 k 个
题解
1.操作1肯定选最小的
2.操作2不在乎数的大小
3.因此我们可以优先实施操作1,然后再实施操作2
code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
ll a[N];
ll n,m,k,x;
int main(){
cin>>n>>m>>k>>x;
for (int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
ll ans=min((m/x),n/k)*k;
for(ll i=1;i<=n;i++)
{
m-=a[i];
if(m<0) break;
ans=max(ans,i+min((m/x),(n-i)/k)*k);
}
cout<<ans;
return 0;
}

浙公网安备 33010602011771号