比赛 20160707 评测结果 AWWWWWWWWW
题目名称 砍树 最终得分 10
用户昵称 c2018 运行时间 1.359 s
代码语言 C++ 内存使用 4.13 MiB
提交时间 2016-07-07 15:12:32
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,A[1000020];
int l=0,r=1000000000;
int f=0;
int mid;
void init()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>A[i];
}
int check(int mid)
{
	int sum=0;
	for(int i=1;i<=n;i++)
		if(A[i]>mid) sum+=A[i]-mid;
	if(sum==m)  return 0;
	if(sum>m)  return -1;
	if(sum<m)  return 1;
}
void print()
{
	if(f) { cout<<mid;return;}
	int b=check(l);
	int c=check(r);
	if(b==0||c==-1)  {cout<<l<<endl;return;}
	if(c==0)  {cout<<r<<endl;return;}
	if(b==1&&c==1){ cout<<r<<endl;return;}
}
int main()
{
	freopen("eko.in","r",stdin);
	freopen("eko.out","w",stdout);
	init();
	int a;
	while(r-l>1)
	{
		mid=(r+l)/2;
		a=check(mid);
		if(a==0)
		{
			f=1;
			break;
		}
		if(a==1) r=mid;
		if(a==-1)  l=mid;
  	}
	print();
	return 0;
}