[タイトル説明:
21世紀には、ビジョンの私たちのフィールドに、より多くの近代的な理論の代表として、生物学、遺伝的および生物学的進化の世紀です。
周知のように、遺伝子は、基本的な構成とパフォーマンスの生活を記録し、遺伝的要因、です。したがって、生物学的進化と遺伝的変異が密接に関連して、生物学的研究への遺伝子変異の研究アプローチが重要な役割を持っています。さて、このようなモデルを見てみましょう:
図1に示すように、全ての遺伝子は、整数に対応するバイナリまたは整数とみなすことができます。
図2に示すように、時間の単位で、1ビットた遺伝子Xを逆にしてもよいです。
図3に示すように、時間の単位で、Y及びX XOR yの任意の遺伝子変異の影響を感染することができる遺伝子Xの遺伝子ライブラリーの対象とすることができます。
今、遺伝子プールが感染する可能性が与えられ、Qグループは、各グループは、初期遺伝子および遺伝子終端を与えている尋ね、あなたが過ごす時間の単位の最小数の各バリエーションについて計算しました。
[入力説明:
1行目二つの整数N、Q;
それぞれの遺伝子ライブラリーの感染の整数を表し、スペースで区切られた2 N行。
次の2行初期遺伝子ターミネーター遺伝子と各整数をそれぞれQ、S、T、。
[出力]説明:
Q出力線順次初期遺伝子との間に費やされる時間は、各遺伝子を終了する起こっ表します。
[サンプル入力]:
3 3
1 2 3
3 4
1 2
3 9
[]出力例:
2
1
2
[時間制限、およびデータの説明の範囲:
時間:1秒容量:256M
20%のためのデータ、N = 0。
40%より多くのデータ、1≤Q≤100、全ての発現された遺伝子は、非負整数以上10 ^ 4ではありません。
データの100%、0≤N≤20,1≤Q≤10^ 5に、全ての発現された遺伝子は、非負整数^ 6〜10を超えません。
考え
各数値は、最高1回まで使用されていますしたがって、セットF 私は、jは唯一作る使用を前に、私は番目量〔と体を参照してくださいサイド離れを] にまでJ の最も小さなステップ数
だから、F 20 、S ^ T答えです
コード
書式#include <cmath> の#include <キュー> の#include <cstdioを> する#include <CStringの> の#include <iostreamの> の#include <アルゴリズム> std名前空間を使用しました。 N INT、QQ、S、T、[75]。 DIS [1 << 20] INT、kは、X; ボイドBFS(){ キュー<整数> Q。 memset(DIS、-1、はsizeof(DIS))。 q.push(0)。 DIS [0] = 0; 一方、{(q.empty()!) K = q.front()。 q.pop(); 以下のために(INT i = 1; iが<= N + 20であり; iは++){ X = K ^ [i]は、 もし(DIS [X] = - 1!) 続けます。 DIS [X] DIS [K] +1 =。 q.push(X)。 } } } int型のmain(){ scanf関数( "%D%dの"、&N、&QQ)。 A [N + 1] = 1。 以下のために(INT I = N + 2、I <= N + 20; I ++) [I] = 2 * [I-1]; BFS(); (私はT、S、1 = int型; I <= QQ、iは++){ため のscanf( "%D%D"、&S&T)。 printf( "%d個の\ n"、DIS [S ^ T])。 } 0を返します。 }