D메일

시간 제한3초메모리 제한1024 MB

요약
2^N개 세계선 각각에 0 또는 1 값을 미리 정해 두고, 라벨을 관찰하며 최대 N+1번의 XOR 이동으로 처음 세계선 번호를 알아낸다.
난이도

어려움10점 중 8점

유형
비트 연산, 조합론, 분할 정복
정답자
아직 제출이 없습니다

문제

엘 프사이 콩그루.

— 호오인 쿄우마

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

세계선이란 특정 시점의 작은 사건 차이로 갈라진 독립적 차원의 한 갈래를 가리킨다. 이러한 세계선들은 모두 동시에 공존하며 서로 영향을 주지 않는 독립적인 평행 우주라고 볼 수 있다.

세계선은 총 2N2^N개가 있으며 각 세계선은 00 이상 2N−12^N-1 이하의 서로 다른 정수로 나타낼 수 있다. 하지만 당신은 현재 당신이 있는 세계선이 몇 번 세계선인지 모른다. 이를 알아내기 위해 D메일과 다이버전스 미터를 사용하려고 한다.

D메일은 과거로 보낼 수 있는 문자메시지이다. 당신은 D메일로 00 이상 2N−12^N-1 이하인 정수 aa를 하나 과거로 보낼 수 있다. 번호가 xx인 세계선에서 D메일로 정수 aa를 보내면 과거의 사건이 미세하게 변경되어 x⊕ax\oplus a번 세계선으로 이동하게 된다. (⊕\oplus는 비트 XOR 연산자이다.)

다이버전스 미터는 현재 세계선을 나타내는 기계이다. 그러나 이 기계는 세계선을 정확하게 보여주지 못하고 00 또는 11로만 표현할 수 있다. 0≤i≤2N−10\leq i \leq 2^N-1인 모든 정수 ii에 대해 다이버전스 미터가 ii번 세계선에서 출력하는 값을 f(i)f(i)라고 하자. 당신은 첫 번째 D메일을 보내기 전, 0≤i≤2N−10\leq i \leq 2^N-1인 모든 정수 ii에 대해 f(i)f(i)의 값을 정할 수 있다. f(i)f(i)의 값은 한 번 정하고 나면 다시 바꿀 수 없으며, 이후 D메일을 보내 세계선이 바뀔 때마다 다이버전스 미터에 출력된 값을 확인할 수 있다. 다이버전스 미터를 설정한 후 D메일을 N+1N+1번 이하로 보내 초기의 세계선이 몇 번 세계선이었는지 알아내 보자.

예제1

  1. 예제 1

    입력
    2 2
    
    
    0
    
    1
    
    0
    
    
    1
    
    
    예상 출력
    
    0001
    ? 0
    
    ? 1
    
    ? 3
    
    ! 2
    ? 2
    
    ! 1