[백준 / C언어] 1358번: 하키

728x90
728x90

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

 

1358번: 하키

첫째 줄에 수 W H X Y P가 주어진다. P는 선수의 수이다. W와 H는 100보다 작거나 같은 자연수이고, H는 짝수이다. X와 Y는 절댓값이 100보다 작거나 같은 정수이다. P는 최대 50인 자연수이다. 둘째 줄부

www.acmicpc.net

 

난이도: solved.ac 실버 4

 

알고리즘 분류


기하학

 

접근 방법


주어진 P개의 좌표와 두 원의 중심 좌표 사이의 거리를 각각 구해서 각 원의 반지름의 길이보다 작거나 같으면 링크에 포함된다고 보았다.

그리고 직사각형 안에 들어도 링크 안에 포함되므로, 위의 두 원 안에 포함되지 않는다면 W * H 크기의 직사각형 영역 안에 포함되는지도 파악해 영역 안에 든다면 링크 안에 포함된다고 보았다.

 

코드


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {
	int W, H, X, Y, P, R, cnt = 0;
	scanf("%d %d %d %d %d", &W, &H, &X, &Y, &P);
	R = H / 2;
	while (P--) {
		int x, y;
		scanf("%d %d", &x, &y);
		int dist1 = (x - X) * (x - X) + (y - Y - R) * (y - Y - R);
		int dist2 = (x - X - W) * (x - X - W) + (y - Y - R) * (y - Y - R);
		if (dist1 <= R * R || dist2 <= R * R)
			cnt++;
		else if (x >= X && x <= X + W && y >= Y && y <= Y + H)
			cnt++;
	}
	printf("%d", cnt);
	return 0;
}
반응형