比赛 20160707 评测结果 C
题目名称 砍树 最终得分 0
用户昵称 Lovelove_boii 运行时间 0.000 s
代码语言 C 内存使用 0.00 MiB
提交时间 2016-07-07 16:29:20
显示代码纯文本
#include<fstream>
#include<algorithm>
using namespace std;
ifstream cin("eko.in");
ofstream cout("eko.out");
int n,m,ans;
int tree[1000001];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>tree[i];
	}
	sort(tree+1,tree+1+n);
	int left=tree[1],right=tree[n],mid;
	while(left+1<right)
	{
		mid=(left+right)/2;
		int sum=0;
		for(int i=n;i>=1;i--)
		{
			if(tree[i]<=mid)
			{
				break;
			}
			sum+=tree[i]-mid;
		}
		if(sum<=m)
		{
			right=mid;
		}
		if(sum>m)
		{
			left=mid;
		}
	}
	int sum_1=0,sum_2=0;
	for(int i=n;i>=1;i--)
	{
		if(tree[i]>left)
		{
			sum_1+=tree[i]-left;
		}
		if(tree[i]>right)
		{
			sum_2+=tree[i]-right;
		}
	}
	
	if(sum_1<sum_2)
	{
		ans=left;
	}
	else
	{
		ans=right;
	}
	cout<<ans;
	cin.close();
	cout.close();
	return 0;
}