Ex: Reverse and Shift

Time Limit: 3 seconds

Memory Limit: 512 MiB

Score: 600 points

Problem Statement

Let nn be a positive integer. Consider a list [p0,p1,...,p2n−1][p_0, p_1, ... , p_{2^n-1}] of length 2n2^n.

We define the following 22 operations:

  • Operation 1: Move the first element to the end
[p0,p1,...,p2n−1]→[p1,...,p2n−1,p0][p_0, p_1, ... , p_{2^n-1}] \rightarrow [p_1, ... , p_{2^n-1}, p_0]
  • Operation 2: Reverse the entire list
[p0,p1,...,p2n−1]→[p2n−1,...,p1,p0][p_0, p_1, ... , p_{2^n-1}] \rightarrow [p_{2^n - 1}, ... , p_1, p_0]

Let g(m,k)g(m, k) be the concatenation of the following actions:

  • First, apply Operation 1 for kk times.
  • Then, apply Operation 2 for mm times.

Given integers nn, mbeforem_{\text{before}}, kbeforek_{\text{before}}, mafterm_{\text{after}} and kafterk_{\text{after}}, implement an n+1n+1-qubit oracle OO on a quantum circuit qc\mathrm{qc}.

For any pair of integers (m,k)(m,k) satisfying 0≤m<20 \leq m < 2 and 0≤k<2n0 \leq k < 2^{n}, the oracle must satisfy

∣m⟩∣k⟩n→O∣m′⟩∣k′⟩n\ket{m}\ket{k}_n \xrightarrow{O} \ket{m'}\ket{k'}_n

Here, 0≤m′<20 \leq m' < 2 and 0≤k′<2n0 \leq k' < 2^{n} must satisfy the following condition:

  • The operation g(m′,k′)g(m', k') is equivalent to applying g(mbefore,kbefore)→g(m,k)→g(mafter,kafter)g(m_{\text{before}}, k_{\text{before}}) \rightarrow g(m, k) \rightarrow g(m_{\text{after}}, k_{\text{after}}) in order.

Constraints

  • 2≤n≤102 \leq n \leq 10
  • 0≤mbefore<20 \leq m_{\text{before}} < 2
  • 0≤kbefore<2n0 \leq k_{\text{before}} < 2^n
  • 0≤mafter<20 \leq m_{\text{after}} < 2
  • 0≤kafter<2n0 \leq k_{\text{after}} < 2^n
  • The quantum circuit depth must not exceed 300300.
  • Integers must be encoded by little-endian.
  • Global phase is ignored in judge.
  • The submitted code must follow the specified format:
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

Please sign in to submit your answer.