해석이 이상할 수 있습니다.
이상한 부분은 말씀해 주시면 수정하겠습니다.
문제: https://codeforces.com/contest/1075/problem/A
시간 제한: 1s,
메모리 제한: 256MB
가로 n, 세로 n 인 체스보드가 있다.
가로는 위에서 아래로 1~n 까지 세로는 왼쪽에서 오른쪽으로 1~n 으로 이뤄져 있다. 체스판 위에 좌표는 ( r , c ) 로 나타낼 수 있으며, r은 가로 c는 세로로의 위치를 나타낸다.
흰 색 king은 ( 1 , 1 )에 위치해 있고 검정 색 king은 ( n , n )에 위치한다.
그들은 천 년동안 위치한다. 그러나 갑자기 아름다운 동전이 (x,y)로 떨어졌다.
서로다른 왕은 그것을 갖기를 원한다.
그래서 그들은 약간의 체스 룰을 변경하여 레이스를 준비하기로 결정했다.
체스처럼 흰 색 king이 먼저 움직인다. 그 다음 검정 색 king이 움직인다.그러나 문제가 있다. 킹은 인접한 칸에 위치하거나 심지어 동시에 같은 칸에 위치할 수 있다.
먼저 코인에 도달한 플레이어가 이기며, 먼저 ( x , y )에 도달한 플레이어가 이긴다는 것과 같다
왕은 모든 방향으로 이동할 수 있는 체스 말인 것을 기억하자.
만약 왕이 (a,b)에 있다면 왕은 한 턴에 (a+1,b) , (a−1,b), (a,b+1), (a,b−1), (a+1,b−1), (a+1,b+1), (a−1,b−1), or (a−1,b+1) 로 움직일 수 있다. 필드 밖으로는 나갈 수 없다.
흰 색 왕이 먼저 움직이면 ( x , y )에 어떤 색에 왕이 먼저 도달하는 지 결정하자
[입력]
첫 줄에는 정수 n (2≤n≤10^18) 이 입력된다-체스 사이드 길이
다음 줄에는 정수 x , y (1≤x,y≤n) 가 입력된다.-코인이 떨어진 좌표
[출력]
흰 색이 이기면 "White" 를
검은 색이 이기면 "Black" 를 출력한다.
먼저, n의 범위가 10^18 인 것을 생각해야 한다.
int 형으로는 담을 수 없는 값임으로 long long 을 사용해준다.
문제를 보면 한 턴 한 턴 생각해야 하는 것처럼 보이지만
왕이 모든 방향으로 이동할 수 있다는 것에 집중해야 한다.
즉, 두 왕은 코인까지 일직선, 최단 거리로 이동할 수 있다.
간단하게 두 왕과 코인까지의 거리가 가까운 왕이 승리하게 되어있는 구조이다.
따라서 코인과 가까운 왕이 승리하고 흰 색이 먼저 움직인다는 것을 감안하여 거리과 같을 경우 흰 색이 승리한다는 조건을 건다.
[코드]
https://github.com/Woobeen906/Codeforces/blob/main/1075-A.cpp