QOJ.ac

QOJ

Limite de temps : 3 s Limite de mémoire : 384 MB Points totaux : 100 Difficulté: [afficher]

#1788. 量子通信

Statistiques

小 Z は量子コンピュータについて独学しており、最近、量子通信の章を研究していて面白い問題に出会いました。この問題では、Alice と Bob が量子通信を行います。通信に使う言語は、サイズ $n$ の辞書 $S$ です。辞書内の各単語 $s_i$($1 \leq i \leq n$)は、256 ビットの 01 文字列で表せます。この問題では、$s_i$ は関数 gen を呼び出して生成できます。問題ディレクトリ内の gen.cpp で確認してください。この関数のパラメータ n、a1、a2 は入力で与えられます。

Alice と Bob は、この後 $m$ 回の通信を行います。各通信では、Alice が Bob に辞書内の単語をちょうど 1 個送ります。しかし、2 人が使う通信路は信頼できず、雑音の影響を受けます。具体的には、$i$ 回目に Alice が送る元の単語を $x_i$ とすると、この 01 文字列は雑音によって最大 $k_i$ ビット反転します。つまり、Bob が受け取る 01 文字列を $y_i$ とすると、$x_i$ と異なるビットが最大 $k_i$ 個あり得ます。また、$y_i$ は辞書 $S$ に含まれない可能性があります。

一方、Bob は悪者の Eve も通信路に侵入し、通信を妨害しようとしていることを知りました。Eve は、Bob が受け取る 01 文字列を任意の 256 ビットの 01 文字列に変えて妨害します。この文字列も辞書 $S$ に含まれない可能性があります。Eve は非常にずる賢く、毎回の通信を妨害するとは限りません。

Bob はあなたに助けを求めました。これから行う各通信について、Bob が最終的に受け取った 01 文字列と、通信の雑音の上限 $k_i$($0 \leq k_i \leq 15$)から、Eve の妨害を受けていない可能性があるかどうかを判定してください。すなわち、Bob が受け取った文字列が、辞書内のいずれかの単語を高々 $k_i$ ビット反転して得られるかどうかです。妨害を受けていない可能性があれば $1$、そうでなければ $0$ を出力してください。Bob はあなたの能力を信頼しているため、オンラインで答える必要があります。具体的な要件は入力の説明を参照してください。

読み込み時間を減らすため、Bob が受け取る文字列は、長さ 64 の 16 進文字列として与えられます。16 進文字列には数字 0 から 9 と大文字の英字 A から F が含まれ、A から F は順に値 $10 \sim 15$ を表します。

16 進文字列は 1 桁ずつ 01 文字列に変換できます。例えば、5 は 0101、A は 1010、C は 1100 に対応します。

入力

ファイル qi.in からデータを読み込んでください。

1 行目には、4 つの非負整数 $n,m,a_1,a_2$ が与えられ、辞書のサイズ、通信回数、関数 gen のパラメータ a1 と a2 の初期値をそれぞれ表します。

プログラム内で、問題文に記載した関数 gen を呼び出して単語表を生成してください。gen.cpp のコードをコピーして使えます。プログラム内のブール型配列 s[N+1][256] が、すべての単語を表します。

続く $m$ 行には、それぞれ長さ 64 の 16 進文字列と非負整数 $k_i$ が与えられ、$i$ 回目の通信で Bob が最終的に受け取った 01 文字列と雑音の上限を表します。

オンラインでクエリに答えることを強制するため、16 進文字列を 256 ビットの 01 文字列に戻した後、各ビットと $lastans$ の排他的論理和を取って初めて、この通信で Bob が実際に受け取った文字列が得られます。$lastans \in \{0,1\}$ は直前のクエリの答えで、最初のクエリの前は $lastans=0$ です。

注意:scanf と printf で unsigned long long 型の変数を読み込み、または出力するとき、対応する書式指定子は llu です。

出力

ファイル qi.out に出力してください。

全部で $m$ 行出力し、各行に現在のクエリの答えを表す整数 $0$ または $1$ を出力してください。

クエリの例

説明を簡単にするため、辞書の単語を直接与え、単語の長さを 4 に減らし、オフラインでクエリに答えてもよいとするなど、簡略化した状況を例にします。

辞書のサイズが $n=2$ で、単語が 1010 と 0111 である場合を考えます。

クエリ B = 1011、$k_1=1$ に対する答えは $1$ です。1010 の 4 番目のビットを反転すれば得られます(ビットは上位から下位へ数え、以下も同様です)。

クエリ 1 = 0001、$k_2=2$ に対する答えは $1$ です。0111 の 2 番目と 3 番目のビットを反転すれば得られます。

クエリ 1 = 0001、$k_3=1$ に対する答えは $0$ です。

  • 1010 を高々 1 ビット反転して得られるのは、1010、0010、1110、1000、1011 です。
  • 0111 を高々 1 ビット反転して得られるのは、0111、1111、0011、0101、0110 です。
  • 1 = 0001 は得られないため、必ず Eve の妨害によって生じたものです。

入出力例

入出力例 1

選手用ディレクトリ内の qi/qi1.in と qi/qi1.ans を参照してください。

入出力例 2

選手用ディレクトリ内の qi/qi2.in と qi/qi2.ans を参照してください。

入出力例 3

選手用ディレクトリ内の qi/qi3.in と qi/qi3.ans を参照してください。

制約

すべてのテストケースで、$1 \leq n \leq 4\times 10^5$、$1 \leq m \leq 1.2\times 10^5$、$0 \leq k \leq 15$ です。$a_1,a_2$ は $[0,2^{64}-1]$ 内で一様ランダムに生成されます。

テストケース番号 $n=$ $m=$ $k_i \leq$ 特別な性質
$1$ $10$ $10$ $2$ なし
$2$ $500$ $500$ $15$ なし
$3$ $1{,}000$ $1{,}000$ $0$ なし
$4$ $2{,}000$ $2{,}000$ $2$ なし
$5$ $5{,}000$ $5{,}000$ $15$ なし
$6$ $10{,}000$ $10{,}000$ $15$ なし
$7$ $20{,}000$ $20{,}000$ $15$ なし
$8$ $100{,}000$ $100{,}000$ $1$ なし
$9$ $400{,}000$ $120{,}000$ $1$ なし
$10$ $50{,}000$ $50{,}000$ $2$ なし
$11$ $70{,}000$ $70{,}000$ $3$ なし
$12$ $100{,}000$ $100{,}000$ $2$ なし
$13$ $30{,}000$ $30{,}000$ $5$ なし
$14$ $60{,}000$ $60{,}000$ $4$ なし
$15$ $120{,}000$ $120{,}000$ $5$ なし
$16$ $60{,}000$ $60{,}000$ $8$ すべてのクエリ文字列をランダムに生成
$17$ $120{,}000$ $120{,}000$ $12$ すべてのクエリ文字列をランダムに生成
$18$ $400{,}000$ $100{,}000$ $15$ すべてのクエリ文字列をランダムに生成
$19$ $30{,}000$ $30{,}000$ $7$ なし
$20$ $60{,}000$ $60{,}000$ $9$ なし
$21$ $90{,}000$ $90{,}000$ $11$ なし
$22$ $200{,}000$ $120{,}000$ $12$ なし
$23$ $400{,}000$ $80{,}000$ $15$ なし
$24$ $400{,}000$ $100{,}000$ $15$ なし
$25$ $400{,}000$ $120{,}000$ $15$ なし

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.