№ 1517Квантовая теория информацииУровень 2

Различить суперпозиции с непересекающимися наборами строк

Входы — массив из $N$ кубитов и два массива битовых строк bits1, bits2 типа Bool[][], имеющие размеры $M_1\times N$ и $M_2\times N$. Каждый список задаёт равновесную суперпозицию своих базисных векторов. Все строки в обоих массивах различны: совпадений ни внутри списков, ни между ними нет.

Гарантируется, что состояние кубитов совпадает с одной из этих двух суперпозиций. Напишите операцию на языке Q#, возвращающую 0 для первого списка и 1 для второго. Число измерений не ограничено.

Например, списки [[false, true, false], [false, false, true]] и [[true, true, true], [false, true, true]] задают $(|010\rangle+|001\rangle)/\sqrt2$ и $(|111\rangle+|011\rangle)/\sqrt2$.

Конечное состояние кубитов неважно.

Заготовка Q#:

namespace Kata {
    import Std.Convert.*;

    operation SuperpositionMeasurement(qs : Qubit[], bits1 : Bool[][], bits2 : Bool[][]) : Int {
        // Implement your solution here...

        return -1;
    }
}