比赛 20160707 评测结果 AAWAWAWWWW
题目名称 砍树 最终得分 40
用户昵称 胡嘉兴 运行时间 0.679 s
代码语言 C++ 内存使用 3.72 MiB
提交时间 2016-07-07 16:04:59
显示代码纯文本
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <cctype>
#include <vector>
#include <algorithm>

using namespace std;

#define N 1000000 + 17

int s[N], n, m;

bool check(int x)
{
	int i, ans = 0;;
	for(i = 1; i <= n; i++)
	{
		if(s[i] > x)
		{
			ans += s[i] - x;
		}
	}
	return ans >= m;
}
int find(int left, int right)
{
	while(left + 1 < right)
	{
		int mid = (left + right) / 2;
		if(check(mid))
		{
			left = mid;
		}
		else
		{
			right = mid;
		}
	}
	if(check(left))
	{
		return left;
	}
	else
	{
		return right;
	}
	return 0;
}
int main()
{
	
	int i, ans;	
	freopen("eko.in", "r", stdin);
	freopen("eko.out", "w", stdout);
	
	scanf("%d %d", &n, &m);
	
	for(i = 1; i <= n; i++)
	{
		
		scanf("%d", &s[i]);
		
	}
	stable_sort(s, s + n);
	
	ans = find(0, s[n]);
	
	printf("%d\n", ans);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}