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

27865번 - 랜덤 게임? 인터랙티브

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 512 MB223594159136.663%

문제

이 문제는 인터랙티브 문제이다.

처음에 인터랙터는 1ドル$부터 $N$까지 정수 중에서 균등한 확률로 수를 하나를 뽑는다. 질문을 통해 인터랙터가 현재 가지고 있는 수를 맞추면 이 문제를 맞힐 수 있다.

당신은 다음과 같은 질문을 최대 20ドル,000円$번 할 수 있다.

  • 현재 가지고 있는 수가 $x$인가? $(1\le x\le N)$

만약 질문의 답이 '아니오.'라면 인터랙터는 현재 가지고 있는 수를 버리고 새로 수를 뽑는다.

입력

양의 정수 $N$이 주어진다. $(1 \le N \le 1,000円)$

출력

다음을 표준 출력 스트림(stdout)으로 한 줄에 출력하여, 인터랙터가 가지고 있는 수가 무엇인지 질문할 수 있다.

  • ? x : 현재 인터랙터가 가지고 있는 수가 $x$인지 확인한다. $(1\le x\le N)$

질문을 한 뒤, 당신은 인터랙터에게서 문자 하나를 입력받아서 질문의 답을 알 수 있다.

  • Y : 현재 인터랙터가 가지고 있는 수는 $x$와 같다.
  • N : 현재 인터랙터가 가지고 있는 수는 $x$와 다르다. 이후 인터랙터는 현재 가지고 있는 수를 버리고 새로 수를 뽑는다. 수를 뽑을 때는 질문의 답을 참고하지 않고 1ドル$부터 $N$까지 정수 중에서 균등한 확률로 수를 하나를 뽑는다.

질문을 한 후에는 반드시 표준 출력 버퍼를 flush 해야 하고, 표준 입력 스트림(stdin)을 통해 질문에 대한 답을 입력받아야 한다. 그렇지 않으면, 시간 초과 또는 런타임 에러를 받는다. 범위를 벗어난 $x$값을 질문하거나 잘못된 형식으로 질문하면 틀렸습니다를 받는다. 또한 20ドル,000円$회 넘게 질문을 하면 틀렸습니다를 받는다.

만약 인터랙터가 현재 가지고 있는 수를 알아낸 경우, 표준 출력 스트림으로 다음 한 줄을 출력한다.

  • ! y : 현재 인터랙터가 가지고 있는 수는 $y$이다.

답을 출력한 이후에는 표준 출력 버퍼를 비우고 프로그램을 바로 종료하여야 한다. 그렇지 않으면 예상하지 못한 채점 결과를 받을 수 있다.

각 언어별로 표준 출력 버퍼를 flush하는 방법은 다음과 같다.

  • C: fflush(stdout)
  • C++: std::cout << std::flush
  • Java: System.out.flush()
  • Python: sys.stdout.flush()

제한

예제 입력 1

10
N
N
N
N
Y

예제 출력 1

 
? 3
? 1
? 7
? 8
? 4
! 4

입출력이 어떤 방식으로 이루어지는지 이해를 돕기 위해, 의도적으로 줄 간격을 조절한 것이다. 실제 입출력과 다른 것에 유의하자.

힌트

출처

채점 및 기타 정보

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

출처

대학교 대회

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

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