https://codeforces.com/contest/1356/problem/C
2桁の状態$\ket{00}$が与えられるので、状態 $$\frac1{\sqrt3}\left( \ket{01} + \ket{10} + \ket{11} \right)$$ を作れ。
この問題はGenerate state |00⟩ + |01⟩ + |10⟩と本質的に同じ問題ですが、Pauliゲート($X, Y, Z$)、アダマール・ゲートとそれらのControlled派生しか用いてはいけないという制限がかかっています。
よって、当該問題の記事にある2つめの方法を用いることができます。すなわち
これで、この問題が解けました。
namespace Solution {
open Microsoft.Quantum.Measurement;
open Microsoft.Quantum.Canon;
open Microsoft.Quantum.Intrinsic;
operation Solve (qs : Qubit[]) : Unit
{
using (x = Qubit())
{
repeat
{
ApplyToEach(H, qs);
(ControlledOnInt(0, X))(qs, x);
let res = MResetZ(x);
}
until(res == Zero);
}
}
}