Sheriruth
시간 제한5초메모리 제한1024 MB
n과 m을 받은 뒤 최대 20번의 질의로 각 B_x 값을 알아내고, x+y+z=2^n-1이며 비트가 겹치지 않는 세 수 가운데 커버 조건을 깨는 것을 찾아야 하는 인터랙티브 문제이다.
문제
이 문제는 인터랙티브 문제이다.
주어진 양의 정수 과, 에 대해서, RUN game이라는 것은 "방어자"가 "공격자"의 공격을 방어하는 컨셉으로 이루어지는 2인용 경쟁 게임이다. 그 진행방식은 다음과 같이 기술된다:
- 방어자는 모든 에 대해서, 의 길이 의 이진전개를 이라고 할 때, 에서 인 값들을 적절히 로 바꾸어 어떤 부터 사이의 값을 가지는 길이 의 수열 를 만든다.
- 공격자는 세 정수 를 선택한다. 이 세 정수는 을 만족해야 하며, 중 어느 두 정수를 뽑더라도 이 둘의 bitwise AND는 이어야 한다. 즉, 는 의 비트를 적절히 나누어가진 세 정수여야 한다. 만약 이렇게 선택한 에 대해서, 다음의 조건이 성립하지 않는다면 공격자는 이 세 정수의 이진전개를 선언하고 승리한다. 그렇지 않다면 방어자가 승리한다.
조건: 임의의 에 대해서, 중 적어도 하나는 번째 원소가 이다. 또한, 에 속한 의 개수의 총합이 이하여야 한다.
히카리와 타이리츠는 RUN game을 플레이하려고 한다. 이들의 게임은 다음과 같이 진행될 것이다.
일단, 맨 처음 이 주어지고 나면 타이리츠는 공격자를 할지 방어자를 할지 결정한다.
타이리츠가 방어자를 하기로 결정했다면, 일반적인 RUN game의 룰대로 타이리츠는 히카리에게 개의 수열을 제공하고, 히카리는 그중 조건을 만족하지 않는 를 찾는다.
그러나, 타이리츠가 공격자를 하기로 결정했다면, 타이리츠는 이상 이하인 에 대해 히카리에게 다음과 같은 질문을 최대 개 할 수 있다:
?: 히카리가 생각한 를 반환받는다.
최대 번의 질문 이내에 만약 타이리츠가 조건을 만족하지 않는 를 찾았다면, 타이리츠는 그 이진전개를 선언하고 승리할 수 있다. 만약 번 이내에 이를 찾지 못했다면, 히카리가 승리한다.
타이리츠의 전략을 수행하는 프로그램을 작성하여라.
제한
힌트
어떤 정수 에 대해서, 의 길이 의 이진전개라는 것은 길이 의 이진수열 인데, 이때 는 가 홀수라면 이고, 그렇지 않다면 이다. 간단히 말해서, 는 의 번째 비트이다.
출력 버퍼를 비우는 방법은 다음과 같다.
- C:
fflush(stdout) - C++:
std::cout << std::flush - Java:
System.out.flush() - Python:
sys.stdout.flush()
이외의 언어에 대해서는 언어별 명세를 참고해야 한다.