https://codeforces.com/contest/1002/problem/A2
$N$桁の量子状態$\ket{0...0}$と、$N$桁の量子状態$\ket{\psi}$を表すbit列$bits$が与えられる。$\ket{0...0}$と$\ket{\psi}$の重ね合わせ状態 $$\ket{S}=\frac{1}{\sqrt{2}}\left( \ket{0...0}+\ket{\psi} \right)$$ を作れ。ただし、$bits[0]=true$である。
$\ket{\psi}$の0bitめが$\ket{1}$であることは保証されているので、 $$\ket{S}=\frac{1}{\sqrt{2}}\left( \ket{00...0}+\ket{1?...?} \right)$$ と表せます。始状態$\ket{0...0}$の0bitめにアダマール・ゲートを作用させると、重ね合わせ状態 $$H_0\ket{00...0}=\frac{1}{\sqrt{2}}\left( \ket{00...0}+\ket{10...0} \right)$$ を作ることができるので、あとは1bitめから順番に、$\ket{1}$にしたいqubitをC-NOTゲートを使って反転させればよいです。
これで、この問題が解けました。
また、$bits[0]=true$が保証されていない場合でも、$bits$を前から順にみて最初にtrueが現れる場所でアダマール・ゲートを作用させればこの問題を解くことができます。
namespace Solution {
open Microsoft.Quantum.Primitive;
open Microsoft.Quantum.Canon;
operation Solve (qs : Qubit[], bits : Bool[]) : ()
{
body
{
H(qs[0]);
for(i in 1..Length(qs)-1){
if(bits[i]){
CNOT(qs[0],qs[i]);
}
}
}
}
}