Logo
(追記) (追記ここまで)

19569번 - 돌멩이 게임 인터랙티브

시간 제한메모리 제한제출정답맞힌 사람정답 비율
3 초 256 MB3101469945.622%

문제

당신은 muse와 함께 아래 규칙으로 게임을 해, 승리해야 한다.

  • 처음에 $N$개의 돌이 있으며, 게임은 당신부터 시작한다.
  • 맨 처음에 당신은 무조건 돌을 한 개 가져가야 한다.
  • 그 다음 차례부터는 돌을 1개 이상 ${x+1}$개 이하로 가져갈 수 있다. 이때, $x$는 전 차례에 상대방이 가져간 돌멩이의 개수이다.
  • 마지막 돌을 가져가는 사람이 이긴다.

그런데, 사악한 muse는 돌의 개수 $N$을 자신이 이길 수밖에 없게 설정해 놓기도 한다! 따라서 당신은 돌의 개수를 보고, 이길 수 없다고 판단되면 첫 수를 두기 전에 게임을 끝내야 한다. muse는 이길 수 있는 경우에서 항상 최선의 수를 둔다. 이때, 게임에서 이길 수 있겠는가?

입력

돌의 개수 $N$이 주어진다. (2ドル \le N \le 10^5$)

출력

먼저, 돌의 개수를 보고 당신이 이길 수 있는지 판단하여라. 이길 수 없다고 판단될 경우 NO를 출력하고 프로그램을 바로 종료해야 한다. 이길 수 있다고 판단될 경우 YES를 출력하고 게임을 진행한다.

수를 둘 때는 가져갈 돌의 개수를 정수로 출력해야 한다. 이때 출력하고 난 뒤, 줄을 바꾸고 버퍼를 비워야 한다.

당신이 수를 두고 나면 muse 역시 수를 둔다. muse가 가져간 돌의 개수를 입력받아 저장한 뒤, 다시 당신이 수를 두면 된다.

게임이 끝나거나 당신이 잘못된 수를 둘 경우 (예: 가져간 돌의 개수가 음수이거나, 현재 있는 돌의 개수보다 많은 경우) 다음 수에서 프로그램은 즉시 종료되며, 문제를 틀리게 된다. 당신이 이겼을 경우, 프로그램은 즉시 종료되어야 한다. 그렇지 않으면, 시간 초과 등 예상치 못한 채점 결과를 받을 수 있다.

이길 수 없는 게임을 이길 수 있다고 판단하고 게임을 시작할 경우, 즉시 오답 판정을 받는 것이 아닌, 게임이 모두 진행된 뒤에 오답 판정을 받는 것임에 유의하자. muse는 이길 수 있는 상황에서 항상 최선의 수를 둔다.

제한

예제 입력 1

6
2
 

예제 출력 1

YES
1
3

위 예시는 입출력이 어떤 방식으로 이루어지는지 이해를 돕기 위해 의도적으로 개행 간격 등을 조절한 것으로, 실제 입출력과는 다르다.

예제 입력 2

7

예제 출력 2

NO

힌트

이 문제는 muse와 게임을 하는 문제이다. 따라서 muse가 당신이 어떤 수를 두었는지 확인하려면, 당신은 출력을 할 때마다 버퍼를 비워 줘야 한다. 출력을 한 번 할 때마다 출력 명령문 바로 아래 줄에 다음과 같은 문장을 추가하면 된다.

  • C / C++의 경우: fflush(stdout);
  • python의 경우: sys.stdout.flush()

출처

Contest > 폴리매스 코드 챔피언십 > 폴리매스 제1회 코드 챔피언십 G번

  • 문제를 만든 사람: 79brue

채점 및 기타 정보

  • 예제는 채점하지 않는다.
(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /