https://codeforces.com/contest/1002/problem/D2
$N$桁の量子状態$\ket{x}$と1桁のqubit$\ket{y}$,$N$桁のbit列$b$が与えられる。$\ket{x}$および$b$の$k$桁めを$x_k, b_k$とするとき、$\ket{y}$をオラクルqubitとして$f(x)=\left(\vec{b}\cdot\vec{x}+\left( \vec{1}-\vec{b}\right)\cdot\left( \vec{1}-\vec{x} \right) \right)\; {\rm mod}\;2=\sum^{N-1}_{k=0}\left(b_kx_k+\left( 1-b_k \right)\cdot\left( 1-x_k \right)\right)\; {\rm mod}\;2$で定義されるオラクルを作成せよ。
前問と似ています。とはいっても、前問の操作に加えて$b_k$が0であっても$(1-x_k)$を$\ket{y}$に対してxor演算してあげるだけで良いです。
これで、この問題が解けました。
なお、与えられた状態$\ket{x}$を破壊するとWAが出るので、NOTゲートを作用させたあとはもとに戻しておく必要があります。
namespace Solution {
open Microsoft.Quantum.Primitive;
open Microsoft.Quantum.Canon;
operation Solve (x : Qubit[], y : Qubit, b : Int[]) : ()
{
body
{
for(i in 0..Length(x)-1){
if(b[i]==0){
X(x[i]);
}
CNOT(x[i],y);
if(b[i]==0){
X(x[i]);
}
}
}
}
}