https://codeforces.com/contest/1002/problem/C2
1桁のqubitが与えられる。このqubitは$\ket{0}$または$\ket{+}$であることが保証されており、それぞれが与えられる確率は$\frac12$ずつである。これに対して、どちらが与えられたかを正しく識別せよ。全体の80%までは「わからない」ことを主張してよいが、そうでない場合には必ず正解しなくてはならない。また、$\ket{0}, \ket{+}$について、それぞれ全体の10%以上のケースで正しく識別しなくてはならない。
前問と問題設定が同じで、不正解が許されなくなっている代わりに正解は20%でよくなっています。ただし、$\ket{0}, \ket{+}$の両方について10%以上のケースで正確に識別することが必要です。
与えられた状態に対してPauli Z演算子を対角とした測定を行うことを考えます。この測定によって固有値$-1$が得られた場合、与えられた状態は必ず$\ket{+}$であることがわかります($\ket{0}$にPauli Z演算子を対角とする測定を行って固有値$-1$が得られることはないため)。また、状態$\ket{0}, \ket{+}$はアダマール・ゲートによって相互に遷移するので、与えられた状態にアダマール・ゲートを作用させたあとにPauli Z演算子を対角とした測定を行い固有値$-1$を得た場合には、与えられた状態は必ず$\ket{0}$であることがわかります。よって、以上の2つのパターンの測定のうちどちらかをランダムに行えば、全体としては2つの状態両方に対して10%以上の確率で正確に測定できることがわかります。
これで、この問題が解けました。
namespace Solution {
open Microsoft.Quantum.Primitive;
open Microsoft.Quantum.Canon;
operation Solve (q : Qubit) : Int
{
body
{
let flag=RandomInt(2); //どちらのパターンで測定をするか決める
if(flag==1){
H(q);
}
if(M(q)==Zero){
return -1;
}
else{
if(flag==0){
return 1;
}
else{
return 0;
}
}
}
}
}