시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
3 초 | 256 MB | 206 | 93 | 64 | 45.390% |
당신은 muse와 함께 아래 규칙으로 게임을 해, 승리해야 한다.
그런데, 사악한 muse는 돌의 개수 $N$을 자신이 이길 수밖에 없게 설정해 놓기도 한다! 따라서 당신은 돌의 개수를 보고, 이길 수 없다고 판단되면 첫 수를 두기 전에 게임을 끝내야 한다. muse는 이길 수 있는 경우에서 항상 최선의 수를 둔다. 이때, 게임에서 이길 수 있겠는가?
돌의 개수 $N$이 주어진다. ($2 \le N \le 10^5$)
먼저, 돌의 개수를 보고 당신이 이길 수 있는지 판단하여라. 이길 수 없다고 판단될 경우 NO를 출력하고 프로그램을 바로 종료해야 한다. 이길 수 있다고 판단될 경우 YES를 출력하고 게임을 진행한다.
수를 둘 때는 가져갈 돌의 개수를 정수로 출력해야 한다. 이때 출력하고 난 뒤, 줄을 바꾸고 버퍼를 비워야 한다.
당신이 수를 두고 나면 muse 역시 수를 둔다. muse가 가져간 돌의 개수를 입력받아 저장한 뒤, 다시 당신이 수를 두면 된다.
게임이 끝나거나 당신이 잘못된 수를 둘 경우 (예: 가져간 돌의 개수가 음수이거나, 현재 있는 돌의 개수보다 많은 경우) 다음 수에서 프로그램은 즉시 종료되며, 문제를 틀리게 된다. 당신이 이겼을 경우, 프로그램은 즉시 종료되어야 한다. 그렇지 않으면, 시간 초과 등 예상치 못한 채점 결과를 받을 수 있다.
이길 수 없는 게임을 이길 수 있다고 판단하고 게임을 시작할 경우, 즉시 오답 판정을 받는 것이 아닌, 게임이 모두 진행된 뒤에 오답 판정을 받는 것임에 유의하자. muse는 이길 수 있는 상황에서 항상 최선의 수를 둔다.
6 2
YES 1 3
위 예시는 입출력이 어떤 방식으로 이루어지는지 이해를 돕기 위해 의도적으로 개행 간격 등을 조절한 것으로, 실제 입출력과는 다르다.
7
NO
이 문제는 muse와 게임을 하는 문제이다. 따라서 muse가 당신이 어떤 수를 두었는지 확인하려면, 당신은 출력을 할 때마다 버퍼를 비워 줘야 한다. 출력을 한 번 할 때마다 출력 명령문 바로 아래 줄에 다음과 같은 문장을 추가하면 된다.
fflush(stdout);
sys.stdout.flush()
Contest > 폴리매스 코드 챔피언십 > 폴리매스 제1회 코드 챔피언십 G번