https://codeforces.com/contest/1002/problem/B3
2桁の量子状態が与えられる。この状態が
のどれであるかを判定し、状態に対応する整数を返せ。
問題文に与えられている4つの状態は、それぞれ \begin{align*} H^{\otimes 2}\ket{00}&=\frac12 (\ket{0}+\ket{1})\otimes (\ket{0}+\ket{1})\\ &=\ket{S_0}\\ H^{\otimes 2}\ket{01}&=\frac12 (\ket{0}+\ket{1})\otimes (\ket{0}-\ket{1})\\ &=\ket{S_1}\\ H^{\otimes 2}\ket{10}&=\frac12 (\ket{0}-\ket{1})\otimes (\ket{0}+\ket{1})\\ &=\ket{S_2}\\ H^{\otimes 2}\ket{11}&=\frac12 (\ket{0}-\ket{1})\otimes (\ket{0}-\ket{1})\\ &=\ket{S_3}\\ \end{align*} と表せます。アダマール演算子がそれ自身の逆演算子であることから \begin{align*} H^{\otimes 2}\ket{S_0}&=\ket{00}\\ H^{\otimes 2}\ket{S_1}&=\ket{01}\\ H^{\otimes 2}\ket{S_2}&=\ket{10}\\ H^{\otimes 2}\ket{S_3}&=\ket{11} \end{align*} であるので、与えられた状態の各qubitにアダマール・ゲートを作用させたあとにPauli Z演算子を対角とする測定を行えばこれらの状態を判別することができます。
これで、この問題が解けました。
namespace Solution {
open Microsoft.Quantum.Primitive;
open Microsoft.Quantum.Canon;
operation Solve (qs : Qubit[]) : Int
{
body
{
mutable ret=0;
ApplyToEach(H,qs);
if(M(qs[0])!=Zero){
set ret=ret+2;
}
if(M(qs[1])!=Zero){
set ret=ret+1;
}
return ret;
}
}
}