문제
풀이
첫번째 예제를 예로 들면
이런 상황이라고 볼 수 있습니다.
이 문제를 푸는 알고리즘은 다음과 같습니다.
- 직사각형안인가?
- 왼쪽 반원 중심부터 거리가 r(=h/2) 이하인가?
- 오른쪽 반원 중심부터 거리가 r(=h/2) 이하인가?
위 셋 중에 하나라도 포함된다면 링크안에 있는것으로 판별합니다.
코드로 표현하면 다음과 같습니다.
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double w,h,x,y,p; //p는 선수의 수
cin>>w>>h>>x>>y>>p;
int aws=0;
for(int i=0; i<p; i++)
{
double p_x,p_y;
cin>>p_x>>p_y;
double distance_from_left_circle=sqrt(pow((x-p_x),2)+pow(y+h/2-p_y,2));
double distance_from_right_circle=sqrt(pow((x+w-p_x),2)+pow(y+h/2-p_y,2));
if((p_x>=x && p_x<=x+w) && (p_y>=y && p_y<=y+h)) //직사각형 안인가?
aws++;
else if(distance_from_left_circle<=h/2) //왼쪽 반원 안에 있는가?
aws++;
else if(distance_from_right_circle<=h/2) //오른쪽 반원 안에 있는가?
aws++;
}
cout<<aws;
}
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[C++] 어린 왕자(1004번) (0) | 2022.09.08 |
---|---|
[C++] 백준-터렛(1002번) (0) | 2022.09.06 |
[C++] 백준-택시 기하학(3053번) (0) | 2022.09.05 |
[C++] 백준-참외밭(2477번) (0) | 2022.09.01 |
[C++] 백준-직각삼각형(4153번) (0) | 2022.08.31 |