$$ \def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#1{\mathinner{\left|{#1}\right\rangle}} \def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}} $$

◇◇Microsoft Q# Coding Contest - Summer 2018 C2-Distinguish zero state and plus state without errors◇◇


☆問題URL

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;
                }
            }
        }
    }
}
                
            

戻る