Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 20041 Escaping 본문

Programming/BOJ

[백준/BOJ] 20041 Escaping

he1fire 2021. 9. 18. 21:39
728x90

문제 : 20041 Escaping

 

20041번: Escaping

첫 번째 줄에는 경찰의 수 N이 주어진다. 단, 1 ≤ N ≤ 500,000이다. 그 다음 N 개의 줄에는 각 경찰의 초기 위치의 좌표 (xi, yi)가 공백을 사이에 두고 주어진다. 다음 줄에는 도둑의 초기 위치의 좌

www.acmicpc.net

도둑의 좌표가 주어지고 경찰의 좌표가 주어졌을 때

도둑이 영원히 도망칠 수 있는지 확인하는 문제이다.

기본적인 아이디어로는 도둑이 도망치는게 가능하다고 할때 굳이 지그재그로 갈 필요없이

위, 아래, 오른쪽, 왼쪽 중에서 한방향을 정해 쭉 달리면 된다는것을 알수 있고

이를 이용해 위, 아래, 오른쪽, 왼쪽 모두에 경찰이 존재할때만 도망치는것이 불가능함을 알수있다.

 

여기에서 현재 경찰이 있는 점이 어느 한 방향을 막을수 있는지 체크하기 위해서는

x축의 차이와 y축의 차이를 비교해서 작거나 같은쪽의 방향을 막는다고 생각하면 된다.

주의할점은 경찰이 (0,0)같이 여러 사분면에 걸쳐있을수 있으므로

else if가 아닌 if문으로 각각 처리해주어야 한다. 


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
typedef pair<ll,ll> pll;
ll N, ans, x, y, chk[4]; // {up, down, left, right}
vector<pll> arr;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N;
    for (int i=0;i<N;i++){
        ll a, b;
        cin >> a >> b;
        arr.push_back({a,b});
    }
    cin >> x >> y;
    for (auto i:arr){
        ll a=i.first-x, b=i.second-y;
        if (a>=0 && b>=0){
            if (a>=b)
                chk[3]=1;
            if (b>=a)
                chk[0]=1;
        }
        if (a>=0 && b<=0){
            if (a>=abs(b))
                chk[3]=1;
            if (abs(b)>=a)
                chk[1]=1;
        }
        if (a<=0 && b<=0){
            if (abs(a)>=abs(b))
                chk[2]=1;
            if (abs(b)>=abs(a))
                chk[1]=1;
        }
        if (a<=0 && b>=0){
            if (abs(a)>=b)
                chk[2]=1;
            if (b>=abs(a))
                chk[0]=1;
        }
    }
    for (auto i:chk)
        ans+=i;
    cout << (ans==4 ? "NO" : "YES");
    return 0;
}
728x90

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 10165 버스 노선  (0) 2022.09.16
[백준/BOJ] 2873 롤러코스터  (0) 2021.09.20
[백준/BOJ] 3321 가장 큰 직사각형  (0) 2021.09.18
[백준/BOJ] 2573 빙산  (0) 2021.01.08
[백준/BOJ] 1916 최소비용 구하기  (0) 2020.12.04
Comments