https://codeforces.com/contest/1356/problem/A1
1 qubitに対する演算$unitary$が与えられ、ここで$unitary$は$I$(恒等演算)もしくは$X$(NOT演算)である。$unitary$を一度だけ呼び出して、$I$であれば0を、$X$であれば1を返せ。
与えられた演算を$\ket{0}$に対して作用させた後にPauli Zを対角とする測定を行い、$\ket{0}$が得られれば$I$、$\ket{1}$が得られれば$X$と判断すればよいです。
namespace Solution {
open Microsoft.Quantum.Intrinsic;
operation Solve (unitary : (Qubit => Unit is Adj+Ctl)) : Int {
mutable res = 0;
using (q = Qubit())
{
// 与えられたoperationを|0>に作用させる
unitary(q);
// 測定をして、|0>ならI、|1>ならX
if (M(q) == One)
{
set res = 1;
}
Reset(q);
}
return res;
}
}