문제
1 이상 10,000 이하의 정수 A, B에 대해 A+B의 값을 출력해야 한다. 단, 이 문제는 인터랙티브 (상호작용) 문제이다. 이 문제에서는 A와 B의 값이 바로 주어지지 않고, 채점기와의 상호작용을 통해 그 값을 알아내야 한다.
상호작용 문제에 대해 잘 모른다면, 제1편을 먼저 풀어보자.
1 이상 10,000 이하의 정수 A, B에 대해 A+B의 값을 출력해야 한다. 단, 이 문제는 인터랙티브 (상호작용) 문제이다. 이 문제에서는 A와 B의 값이 바로 주어지지 않고, 채점기와의 상호작용을 통해 그 값을 알아내야 한다.
상호작용 문제에 대해 잘 모른다면, 제1편을 먼저 풀어보자.
제1편과 같은 방식으로 상호작용하면 된다. 단, 이 문제에서는 최대 19,997번 질문할 수 있다.
이 문제의 채점기는 적응하지 않는다. 자세한 설명은 아래 노트 란을 참조하자.
이 문제는 예제를 포함하여 10개의 테스트케이스를 사용한다.
상호작용 문제의 채점기는 적응하는 (adaptive) 채점기와 적응하지 않는 (non-adaptive) 채점기로 나뉜다. 둘의 구분은 다음과 같다.
? A 1과 ? A 2에 모두 "예"라고 답하는 등의 모순적인 답변은 하지 않는다.A와 B의 값을 정하는 시점이 사용자에게 보이지 않는데, 채점기가 적응하든 아니든 무슨 차이가 있을까? 그 차이는 다음과 같다. 만약 이 문제의 채점기가 적응한다면 이 문제는 풀 수 없는 문제였을 것이다. 다음과 같은 채점기를 사용하면 A와 B를 알아내는 데 항상 19,998번의 질문이 필요한데, 실제로는 19,997번까지만 질문할 수 있기 때문이다.
두 후보 집합에서 총 19,998개의 원소를 제거해야 정답을 받는데, 질문 하나당 한 원소만 지울 수 있으므로 최소 19,998번의 질문이 필요한 것이다.
하지만 이 문제의 채점기는 적응하지 않기 때문에, 위와 같은 방식을 사용하지 않고 A와 B의 값을 처음부터 정해 놓는다. 이 경우에는 랜덤을 잘 활용하면 각 테스트케이스에 대해 99.999999%의 확률로 정답을 낼 수 있다. 정답 확률이 정확히 100%가 아니니까 틀린 풀이가 아닌지 의문이 들 수 있다. 하지만 실제로 제출했을 때 틀렸습니다를 받을 일은 사실상 없다고 보아도 무방하고, 이렇게 랜덤을 사용하여 푸는 문제가 온라인 저지는 물론 대회에도 가끔 등장한다는 점을 고려하면 충분히 인정되는 풀이라고 할 수 있다.
0 0 1 0 1
? A 123 ? A 2517 ? A 3150 ? B 1342 ? B 205 ! 3355