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;
}
반응형