$$ \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 - Warmup F- Distinguish multi-qubit basis states◇◇


☆問題URL

https://codeforces.com/contest/1001/problem/F

☆問題の概要

N桁のqubit状態とbit列$bits0,bits1$が与えられる。与えられた状態が$bits0,bits1$のどちらであるか調べ、$bits0$であれば0を、$bits1$であれば1を返せ。

☆解法

すべてのqubitに対してPauli Zを対角とする測定をして、どちらのbit列であるか調べればよいです。

☆ソースコード

                
namespace Solution {
    open Microsoft.Quantum.Primitive;
    open Microsoft.Quantum.Canon;

    operation Solve (qs : Qubit[], bits0 : Bool[], bits1 : Bool[]) : Int
    {
        body
        {
            for(i in 0..Length(qs)-1){ 
                let state=(M(qs[i])!=Zero);
                if(state!=bits0[i]){
                    return 1;
                }
                if(state!=bits1[i]){
                    return 0;
                }
            }
            return 0;
        }
    }
}
                
            

戻る