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

Различить две суперпозиции ровно одним измерением

Входы — массив из $N$ кубитов и два массива битовых строк bits1, bits2 типа Bool[][]. Их размеры равны $M_1\times N$ и $M_2\times N$; в общем случае $M_1\ne M_2$. Каждый список задаёт равновесную суперпозицию перечисленных в нём базисных векторов. Например, [[false, true, false], [false, true, true]] задаёт $(|010\rangle+|011\rangle)/\sqrt2$.

Гарантируется позиция $Q$, в которой все строки первого массива имеют одно и то же значение, все строки второго — также одно и то же, причём эти значения противоположны.

Напишите операцию на языке Q#, возвращающую 0 для суперпозиции первого списка и 1 для суперпозиции второго. Разрешено ровно одно измерение.

Например, для списков [[false, true, false], [false, true, true]] и [[true, false, true], [false, false, true]] состояния равны $(|010\rangle+|011\rangle)/\sqrt2$ и $(|101\rangle+|001\rangle)/\sqrt2$; их можно различить по второму кубиту.

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

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

namespace Kata {
    import Std.Convert.*;

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

        return -1;
    }
}