Ex: Reverse and Shift

Time Limit: 3 sec

Memory Limit: 512 MiB

Score: 600

Problem Statement

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

We define Operation 1 and Operation 2 as follows:

  • Operation 1: Move the first element to the end
[p0,p1,...,p2n1][p1,...,p2n1,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,...,p2n1][p2n1,...,p1,p0][p_0, p_1, ... , p_{2^n-1}] \rightarrow [p_{2^n - 1}, ... , p_1, p_0]

Also, for integers mm, kk with 0m<20 \leq m < 2, 0k<2n0 \leq k < 2^n, 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+1)(n + 1)-qubit oracle OO on a quantum circuit qc\mathrm{qc}.

The oracle OO must satisfy

mknOmkn,\ket{m}\ket{k}_n \xrightarrow{O} \ket{m'}\ket{k'}_n,

where g(m,k)g(m', k') must be equivalent to the concatenation of the following actions:

  • First, apply g(mbefore,kbefore)g(m_{\text{before}}, k_{\text{before}}).
  • Then, apply g(m,k)g(m, k).
  • Finally, apply g(mafter,kafter)g(m_{\text{after}}, k_{\text{after}}).

Constraints

  • 2n102 \leq n \leq 10
  • 0mbefore<20 \leq m_{\text{before}} < 2
  • 0kbefore<2n0 \leq k_{\text{before}} < 2^n
  • 0mafter<20 \leq m_{\text{after}} < 2
  • 0kafter<2n0 \leq k_{\text{after}} < 2^n
  • The 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.