解説
問題 A2 にて実装したスワップゲートを利用することで、この問題を解くことができます。
以下の 量子ビットの例を確認してみましょう。

まず、 番目と 番目の量子ビットをスワップします。
次に、 番目と 番目の量子ビットをスワップします。
したがって、 回のスワップで量子状態 を得ることができました。
以上の操作を一般化すると、 回のスワップによって目的の量子状態 を生成できます。 さらに、各スワップは深さ の量子回路で実装できるため、全体の量子回路の深さは となり、結果としてこの問題を解くことができます。
解答例
解答例は以下の通りです。
from qiskit import QuantumCircuit
def solve(n: int) -> QuantumCircuit:
def swap(n: int, qubit1: int, qubit2: int) -> QuantumCircuit:
qc = QuantumCircuit(n)
qc.cx(qubit1, qubit2)
qc.cx(qubit2, qubit1)
qc.cx(qubit1, qubit2)
return qc
qc = QuantumCircuit(n)
for i in reversed(range(n - 1)):
qc.compose(swap(n, i, i + 1), inplace=True)
return qc
探求
コンテスト後、hiryuN さんによって回路深さ の解法が 発見 されました。 このアルゴリズムは、A4: Cyclic Shift Oracle の のアルゴリズムを、 ビット目で ビット目を置き換える操作に言い換えると導かれます。