카테고리 없음

[백준] 2110번: 공유기 설치

컴슈니 2023. 7. 30. 19:38

문제

https://www.acmicpc.net/problem/2110

 

2110번: 공유기 설치

첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가

www.acmicpc.net

문제 해결

이분탐색

 

결과

 

코드

#include<iostream>
#include<algorithm>
using namespace std;

using ll = long long;
const int LM = 200005;
int n, c;
ll pos[LM];

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> n >> c;
	for (int i = 0; i < n; i++)
	{
		cin >> pos[i];
	}

	sort(pos, pos + n);

	ll low = 0, high = pos[n - 1];
	ll ans = 0;
	while (low <= high)
	{
		ll mid = (low + high) / 2;
		ll cnt = 1;
		ll last = pos[0];
		for (int i = 1; i < n; i++)
		{
			if (pos[i] - last >= mid)
			{
				cnt++;
				last = pos[i];
			}
		}

		if (cnt >= c)
		{
			ans = mid;
			low = mid + 1;
		}
		else
		{
			high = mid - 1;
		}
	}
	cout << ans;
	return 0;
}
728x90
반응형