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

32304번 - 나머지를 만들어요 인터랙티브

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB10372163.109%

문제

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

호반우는 10ドル^{9}$ 이하의 음이 아닌 정수 $N$과 양의 정수 $M$을 가지고 있는데 $N$과 $M$이 무엇인지 궁금해하는 상호에게 다음과 같은 제안을 했다.

"10ドル^{9}$이하의 양의 정수 $X$를 고르면 $X$의 배수와 $N$과의 차이 중에서 가장 작은 값을 $M$으로 나눈 나머지를 알려줄게. 단, 질문은 최대 100ドル$번까지 할 수 있어."

호반우는 상호가 예측한 $N, M$이 자신이 가진 $N, M$과 달라도 10ドル^{9}$ 이하의 모든 양의 정수 $X$에 대한 질문에서 대답이 일치한다면 정답으로 인정하려 한다.

상호가 $N, M$으로 예측한 수가 $A, B$이고 호반우가 이를 정답으로 인정했을 때 가능한 $A, B$ 중에서 $A + B$가 가장 작은 걸 찾아보자.

인터랙터

호반우에게 다음과 같은 쿼리를 출력해 최대 100ドル$번까지 질문을 할 수 있다.

  • ? X: $X$의 배수와 $N$과의 차이 중에서 가장 작은 값을 $M$으로 나눈 나머지를 물어본다. $(1 \leq X \leq 10^{9})$

질문을 한 후에는 질문의 답변인 음이 아닌 정수가 하나 주어진다.

정답을 알아낸 경우 다음과 같이 출력하고 프로그램을 종료해야 한다.

  • ! a b: 가능한 $A, B$ 중에서 $A + B$가 가장 작은 것은 $a, b$이다. $A + B$가 가장 작은 것이 여러 가지라면 그중 아무거나 출력한다. $(0 \leq a \leq 10^{9} ; 1 \leq b \leq 10^{9})$

만약 100ドル$번을 초과하여 질문하거나 출력한 답이 정답이 아니라면 틀렸습니다를 받는다. ! a b는 100ドル$번의 질문에 포함되지 않는다.

각 줄을 출력한 후에는 표준 출력 버퍼를 비워주어야 한다. 언어별로 표준 출력 버퍼를 비우는 방법은 다음과 같다.

  • C: fflush(stdout)
  • C++: cout.flush()
  • Java: System.out.flush()
  • Python: sys.stdout.flush()
  • 이외의 언어 : 각 언어의 레퍼런스를 참고한다.

$N$과 $M$의 값은 프로그램이 시작할 때 정해지며 인터랙션 도중에 변하지 않는다.

출력 형식이나 제한을 지키지 않은 경우 예상치 못한 채점 결과를 받을 수 있다.

입력

출력

제한

예제 입력 1

1
0
1
2
3
3

예제 출력 1

? 2
? 3
? 4
? 5
? 6
? 7
! 3 4

호반우가 가진 $N, M$이 3,ドル 6$일 때 가능한 $A, B$는 $(3, 4), (3, 5), (3, 6), (3, 7), \cdots , (3, 10^{9})$이며 이중 $A + B$가 가장 작은 것은 3,ドル 4$이다.

힌트

출처

University > 경북대학교 > 2024 Goricon H번

채점 및 기타 정보

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

출처

대학교 대회

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

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