90分求助
查看原帖
90分求助
823061
Arrosw楼主2022/10/23 21:20
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1e6+10;
int tree[N],d[N];
int n,m;

int sum(int l,int r,int a[])
{
	int ans = 0;
	for (int j = l; j <= r; j++) ans += a[j];
	return ans;
}

int fam(int n,int m)
{
	int res = 0,i = 0;
	for(; res + d[i] * i <= m; i++)
	{	
		res += d[i] * i;
		if ( res == m) break; 
	}
	if (res == m) 
	{	
		return sum(0,i,d);
	}
	else if (res < m)
	{
		int x = (m-res) % i;
		if( x == 0) return sum(0,i-1,d)+(m-res)/i;
		else return sum(0,i-1,d)+1;
			
	} 	
}

int main()
{
	cin >> n >> m;
	for (int i = 0; i < n; i++) scanf("%d",&tree[i]);
	sort(tree,tree+n);
	reverse(tree,tree+n);
	d[0] = 0;
	for (int i = 1; i < n; i++) d[i] = tree[i-1]-tree[i];
	cout << tree[0]-fam(n,m);
	return 0;
	
	
}
2022/10/23 21:20
加载中...