$$ \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 2020 - Warmup A1 - Distinguish I from X◇◇


☆問題URL

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

戻る