進数(ビット演算)

#include <ビット/ STDC ++ H.> 
使用して名前空間STD; 
int型N-; 
INT getBits1(N-INT)//バイナリ数は数1の形態で得られる
{ 
	INT RES = 0; 
	一方、(N-)
	{ 
		IF( N-&1)RES ++; 
		N - >> = 1; 
	} 
	戻りRES; 
} 

int型getBits2(INT N-)
{ 
	int型RES = 0; 
	一方、(N-)
	{ 
		RES ++; 
		N- = N-&(N - 1); //時間は1消去OH 
	} 
	RESを返す; 
} 

int型)(主
{ 
	しばらく(N - >> CIN)
	{ 
		COUT << getBits1(N-)<< "" << getBits2(N-)<< ENDL; 
	} 
	戻り0; 
}    
// 1 1 = 1 
// 2 = 10 1 
@ 3 = 112
// 4 = 100 1

トピック:

2非負整数x及びyは、F(x、y)はxとyのバイナリ形式で異なるビットの数として定義されます。例えば、F(2、3)1、F(0,3)= 2、F(5、10)= 4 =。今非負整数AとBの2組の所与、Bの各整数Bについては、F(a、b)が最小になるように整数aを見つけるべきです。集合A内に複数のそのような整数である場合、最小のものを選択。

入力:

入力の最初の行は、テストケースの数を示す整数T(0 <T≤100)です。各テストケースの最初の行は、それぞれ2組のAとBの整数の数を示す(nは100≤、0 <m)の2の正の整数m及びnが含ま。次いで、非負整数を含むそれぞれが従う(M + N)ラインは、大きくない1000000よりも第1のm行は、セットAの整数と他のn行は、集合Bに整数されています

出力:

あなたは出力n行すべき各テストケースについて、それぞれが単一の行の各クエリの結果が含まれています。

サンプル入力:

2 
2 5 
1 
2 
1 
2 
3。
4。
5。
5 2。
1000000 
9999 
1423 
3421 
0 
13245 
353 
出力例:
1 
2 
1 
1 
1 
9999 
0
#include <ビット/ STDC ++ H> 
名前空間STDを使用して、
int型F(int型N)
{ 
	int型RES = 0。
	(n)は、一方
	{ 
		RES ++。
		N = N・(N-1)。
	} 
	RESを返します。
} 

int型のmain()
{ 
	[105] int型。
	INT T、N、M、I、J、K、ミネソタ州、B、T。
	scanf関数( "%のD"、&T)。
	一方、(T--)
	{ 
		scanf関数( "%d個の%のD"、&N、&M)。
		用(i = 0; iがn <; iは++)のscanf( "%dの"、および[I])。
		用(i = 0; iがm <; Iは++)
		{ 
			scanf関数( "%のD"、およびB)。
			ミネソタ州= F([0] ^ B)。
			K = 0。
			(; J <N J ++ J = 1)のために
			{ 
				T = F([J] ^ B)。
				IF(ミネソタ州は> T ||ミネソタ== T && [K]>
					K = J; 
				} 
			} 
			のprintf( "%d個の\ n"、[K])。
		} 
	} 
	0を返します。
}

  

 

 

おすすめ

転載: www.cnblogs.com/dragondragon/p/11345050.html