记录编号 278354 评测结果 AAAAAAAAAA
题目名称 砍树 最终得分 100
用户昵称 Gravatar胡嘉兴 是否通过 通过
代码语言 C++ 运行时间 0.651 s
提交时间 2016-07-07 17:41:34 内存使用 4.13 MiB
显示代码纯文本
#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;
	long long 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, m);
	
	printf("%d\n", ans);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}