問題文
n を正の整数とする。長さが 2n のリスト [p0,p1,...,p2n−1] に対し、以下の 2 種類の操作を考える。
[p0,p1,...,p2n−1]→[p1,...,p2n−1,p0]
[p0,p1,...,p2n−1]→[p2n−1,...,p1,p0]
加えて、操作 g(m,k) を「操作 1 を k 回、続けて操作 2 を m 回行う操作」として定義する。
整数 n, mbefore, kbefore, mafter, kafter が入力として与えられるので、次の条件を満たすオラクル O を、n+1 量子ビットをもつ量子回路 qc 上に実装せよ。
0≤m<2 と 0≤k<2n を満たす任意の整数の組 (m,k) に対して
∣m⟩∣k⟩nO∣m′⟩∣k′⟩n
ただし、0≤m′<2 と 0≤k′<2n は以下を満たす必要がある。
- 操作 g(m′,k′) は、「g(mbefore,kbefore)→g(m,k)→g(mafter,kafter) を順に行う操作」である。
制約
- 2≤n≤10
- 0≤mbefore<2
- 0≤kbefore<2n
- 0≤mafter<2
- 0≤kafter<2n
- 量子回路の 深さ は 300 を超えてはならない。
- 整数は リトルエンディアン にしたがってエンコードすること
- グローバル位相 は問わない。
- 提出されるコードは次のフォーマットにしたがうこと
from qiskit import QuantumCircuit
def solve(n: int, m_before: int, k_before: int, m_after: int, k_after: int) -> QuantumCircuit:
qc = QuantumCircuit(n + 1)
# Write your code here:
return qc