| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 (추가 시간 없음) | 1024 MB (추가 메모리 없음) | 158 | 52 | 47 | 47.000% |
이 문제는 인터랙티브 문제입니다.
한 방랑 상인이 신촌 지역 대학교 프로그래밍 동아리 연합 ICPC Sinchon에 찾아왔다.
"특별한 보안 프로그램 bitwise OR wizard를 소개하지. 여기 사용 가이드를 읽어 보시게.
2ドル$번까지 틀릴 수 있지만 특수한 기능을 통해 비밀번호를 잊었을 때를 대비할 수 있고 비밀번호를 모르는 사람은 절대 암호를 풀 수 없지. 어떤가? 부가세 포함 단돈 3ドル,300円$원에 판매하겠네."
2ドル,700円$원으로 연세우유 생크림빵을 먹고 싶었던 ICPC Sinchon 회장은 잠깐 고민에 빠졌지만 결국 구매를 결정하기로 하였다. 이때, ICPC Sinchon의 알고리즘 고수가 나타나 이를 저지하고 나섰다.
"비밀번호를 모르는 사람도 뚫어낼 수 있는 허술한 프로그램을 판매하려 하다니, 절대 용서할 수 없어."
어떻게 한다는 것일까?
첫째 줄에 순열의 길이를 나타내는 양의 정수 $N$이 주어진다. (1ドル \leq N \leq 2 ,円 024$)
인터랙터에게 보낼 수 있는 쿼리는 다음과 같다.
숨겨진 순열 $\{h_{n}\}$에 대해 쿼리의 결과는 한 줄에 공백으로 구분되어 주어지는 $N$개의 정수 $h_{1}|p_{1},ドル $h_{2}|p_{2},ドル $\cdots,ドル $h_{N}|p_{N}$을 입력받아 확인할 수 있다.
숨겨진 순열을 알아냈다면 다음과 같이 출력하고 프로그램을 종료해야 한다. 정답을 출력하는 것은 쿼리에 포함되지 않는다.
모든 출력 이후에는 반드시 표준 출력 버퍼를 flush해야 한다. 언어별로 표준 출력 버퍼를 flush하는 방법은 다음과 같다.
fflush(stdout)std::cout << std::flushSystem.out.flush()sys.stdout.flush()기타 언어의 경우 각 언어의 documentation을 참조하자.
출력 형식을 지키지 않거나 쿼리를 2ドル$번보다 많이 보낸 경우에는 예상치 못한 채점 결과를 받을 수 있음에 유의하자.
1
! 0
4 0 3 1 3
? 0 2 1 3 ! 0 3 1 2
순열의 범위가 $[1, N]$이 아닌 $[0, N-1]$임에 유의하자.