반응형

[ 백준 2805번 나무자르기 ]

2805번: 나무 자르기 (acmicpc.net)

 

2805번: 나무 자르기

첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보

www.acmicpc.net

 

#include<iostream>
#include<algorithm>
using namespace std;
long long tree[1000001];
long long n,m,l,r=0,md,sum;
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		cin>>tree[i];
	}
	sort(tree,tree+n);
	l=0;
	r=2000000000;
	while(1)
	{
		md=(l+r)/2;
		if(l > r) break;
		sum=0;
		for(int i=0;i<n;i++)
		{
			if(tree[i]-md > 0)
				sum+=(tree[i]-md);
		}
		if(sum < m)
		{
			r=md-1;
		}
		else if(sum > m)
		{
			l=md+1;
		}
		else 
		{
			break;
		}
	}
	cout<<md<<'\n';
	return 0;
}
반응형
Posted by 명문코딩컴퓨터
,