20分求助
查看原帖
20分求助
1040409
dhpzy楼主2024/1/21 14:31
#include<bits/stdc++.h>
using namespace std;
long long ans,n,m,a[100100],w;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++)
	{
		a[i]-=w;
		if(a[i]<=0) continue;
		if(!m) ans+=(n-i+1)*a[i]-1;
		else if(n-i+1>2){
			if(m>=a[i]) m-=a[i],w+=a[i],ans+=a[i]*(n-i+1)-1;
			else{
				ans+=m*(n-i+1);
				m=0,a[i]-=m,w+=m;
				ans+=a[i]*(n-i+1)-1;
			}
		}else if(a[i]==1){
			if(m) m--,w++;
			ans+=n-i;
		}else{
			if(m*2<a[i])
			{
				ans+=m*2,a[i]-=m*2;
				m=0;
				ans+=a[i]*(n-i+1)-1;
			}else{
				if(a[i]&1)
				{
					long long x=a[i]-1;
					ans+=(x/2)*(n-i+1)+(n-i);
					m-=x/2;
				}else{
					m-=a[i]/2;
					ans+=(a[i]/2)*(n-i+1)-1;
				}
			}
		}
	}
	cout<<ans;
}
2024/1/21 14:31
加载中...