pstopia Notes for Problem Solving Contest

[Easy] MagicalGirlLevelOneDivOne

Topcoder SRM 514 Div1

Problem

(0,0) 에서 시작할 때 n=1 일 때 어디를 갈 수 있는지 그려보면 (x+y) % 2 == 0 인 곳을 갈 수 있다. n=2 일 때도 마찬가지로 대충 그려보면 (0,1), (1,0), (0,-1), (-1,0) 이 4가지 위치로 이동할 수 있다. 즉, n=2 가 있으면 꿈틀꿈틀 움직여서 모든 칸을 다 방문할 수 있다는 뜻이다! 이제 n이 2보다 크면 어떻게 될까? 임의의 n이어도 (0,2), (2,0), (0,-2), (-2,0) 이 4가지 위치로 이동할 수 있다는건 쉽게 알 수 있다. 이 스텝을 이용하면 (+n,+1), (+n,-1), (-n,+1), (-n,-1), (+1,+n), (+1,-n), (-1,+n), (-1,-n) 인 이동을 (+n-2,+1), (+n-2,-1), (-n+2,+1), (-n+2,-1), (+1,+n-2), (+1,-n+2), (-1,+n-2), (-1,-n+2) 로 변환할 수 있다. 따라서 jumpType 이 n-2인 이동을 만들어낼 수 있다! 즉, jumpType 이 n인 것이 있으면, n-2, n-4, n-6, ... 도 얼마든지 만들어낼 수 있다. 따라서 만약 jumpType 중에 짝수인 것이 있다면, 그것을 jumpType 2로 변환하여 모든 칸에 다 도달할 수 있고 짝수인 것이 없다면 jumpType 1로 변환하여 (x+y) % 2 == 0 인 칸에 도달할 수 있다.