UOJ#577変異

[タイトル説明:

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を返します。
}

 

おすすめ

転載: www.cnblogs.com/mysh/p/11524963.html