A+B - 10 (제2편)

문제

1 이상 10,000 이하의 정수 A, B에 대해 A+B의 값을 출력해야 한다. 단, 이 문제는 인터랙티브 (상호작용) 문제이다. 이 문제에서는 A와 B의 값이 바로 주어지지 않고, 채점기와의 상호작용을 통해 그 값을 알아내야 한다.

상호작용 문제에 대해 잘 모른다면, 제1편을 먼저 풀어보자.

출력

제1편과 같은 방식으로 상호작용하면 된다. 단, 이 문제에서는 최대 19,997번 질문할 수 있다.

이 문제의 채점기는 적응하지 않는다. 자세한 설명은 아래 노트 란을 참조하자.

힌트

이 문제는 예제를 포함하여 10개의 테스트케이스를 사용한다.

상호작용 문제의 채점기는 적응하는 (adaptive) 채점기와 적응하지 않는 (non-adaptive) 채점기로 나뉜다. 둘의 구분은 다음과 같다.

A와 B의 값을 정하는 시점이 사용자에게 보이지 않는데, 채점기가 적응하든 아니든 무슨 차이가 있을까? 그 차이는 다음과 같다. 만약 이 문제의 채점기가 적응한다면 이 문제는 풀 수 없는 문제였을 것이다. 다음과 같은 채점기를 사용하면 A와 B를 알아내는 데 항상 19,998번의 질문이 필요한데, 실제로는 19,997번까지만 질문할 수 있기 때문이다.

  1. 채점기가 A의 후보 집합과 B의 후보 집합을 관리한다. 처음에는 두 집합 모두 {1,2,,10000}이다.
  2. 프로그램이 질문할 때, 후보 집합에 원소가 두 개 이상 있다면 "아니요"라고 답한 뒤, 질문한 값이 집합에 있을 경우 이를 제거한다. 후보 집합에 원소가 하나만 있다면 질문에 따라 "예" 또는 "아니요"라고 답한다.
  3. 프로그램이 A+B의 값을 출력할 때, 두 후보 집합 중 하나라도 원소가 두 개 이상 있다면 오답으로 판정하고, 아니라면 정답으로 판정한다.

두 후보 집합에서 총 19,998개의 원소를 제거해야 정답을 받는데, 질문 하나당 한 원소만 지울 수 있으므로 최소 19,998번의 질문이 필요한 것이다.

하지만 이 문제의 채점기는 적응하지 않기 때문에, 위와 같은 방식을 사용하지 않고 A와 B의 값을 처음부터 정해 놓는다. 이 경우에는 랜덤을 잘 활용하면 각 테스트케이스에 대해 99.999999%의 확률로 정답을 낼 수 있다. 정답 확률이 정확히 100%가 아니니까 틀린 풀이가 아닌지 의문이 들 수 있다. 하지만 실제로 제출했을 때 틀렸습니다를 받을 일은 사실상 없다고 보아도 무방하고, 이렇게 랜덤을 사용하여 푸는 문제가 온라인 저지는 물론 대회에도 가끔 등장한다는 점을 고려하면 충분히 인정되는 풀이라고 할 수 있다.

예제 입력 1 복사

​
0

0

1

0

1

예제 출력 1 복사

? A 123

? A 2517

? A 3150

? B 1342

? B 205

! 3355