반응형

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

 

8983번: 사냥꾼

KOI 사냥터에는 N 마리의 동물들이 각각 특정한 위치에 살고 있다. 사냥터에 온 사냥꾼은 일직선 상에 위치한 M 개의 사대(총을 쏘는 장소)에서만 사격이 가능하다. 편의상, 일직선을 x-축이라 가

www.acmicpc.net

 

각 동물이 사냥당할 수 있는 범위인지 구해주었습니다.

동물의 좌표가 x, y라면,

l - y > 0 일 때, (x - (l-y)) ~ (x + (l-y)) 범위 내에 사로가 속해있다면 사냥이 가능합니다.

범위 내에 사로가 속해있는지를 이분 탐색을 통하여 구해주었습니다.

 

#include <algorithm>
#include <iostream>
int m, n, l, ans = 0, x, y, shot[100001];
int main() {
	scanf("%d %d %d", &m, &n, &l);
	for (int i = 0; i < m && scanf("%d", &shot[i]); i++);
	std::sort(shot, shot + m);
	for (int i = 0; i < n && scanf("%d %d", &x, &y); i++) {
		int val = l - y, s = 0, e = m;
		if (val < 0) continue;
		while (s <= e) {
			int mid = (s + e) / 2;
			if (shot[mid] < x - val) s = mid + 1;
			else if (shot[mid] > x + val) e = mid - 1;
			else {
				ans++;
				break;
			}
		}
	}
	printf("%d", ans);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 2565 : 전깃줄  (0) 2021.11.14
백준 1365 : 꼬인 전깃줄  (0) 2021.11.14
백준 2512 : 예산  (0) 2021.11.14
백준 11000 : 강의실 배정  (0) 2021.11.14
백준 3109 : 빵집  (0) 2021.11.14

+ Recent posts