51nod3047 位移運算

2021-10-23 07:45:46 字數 970 閱讀 2497

給出兩個數a,b。問a能否只通過位移運算( >>和 << 可以多次使用)變成b。如果可以輸出"yes",否則輸出"no"。

第一行:乙個數 t ( 1≤t≤100000)。

第2 ~ t+1行:每行2個a,b中間用空格分隔(0≤a, b≤10^9)。

輸出共t行,對應答案的"yes"和"no"

對於20%的資料,1≤t≤50,0≤a, b≤20;

對於40%的資料,1≤t≤2000;

對於100%的資料,1≤t≤100000,0≤a, b≤10^9;

44 2

2 43 4

1 3yes

yesyes

no當a=0時,b不管怎麼位移都是0

任何大於0的a經過若干次右移終能變成0、1,而1經過n次左移只能變成2^n,

故a≥1時,b可以是a本身、…、0、1、2^n

那b為…(如3、5、6等)時呢?就需要對a進行特殊處理來得出b了:

例:輸入

213 5

11 20

輸出yes

yes13即1101,5即101;

11即1011,20即10100;

規律:二進位制b去掉末端連續0以後,總是二進位制a的一部分

故我們把a和b都轉換成二進位制字串,擷取b串有效部分去匹配a串就可以了

#include

using

namespace std;

string dectobin

(int n)

return s;

}int

main()

else

if(a>=1)

else

} cout<<

(flag?

"yes"

:"no"

)<}return0;

}

執行時間和空間:

703ms

1,916kb

寒假Day50 51nod 3047 位移運算

用n條直線,劃分平面,最多能夠劃分為多少塊?n 1 n 2 1 3 7 題意 給出兩個數a,b。問a能否只通過位移運算 和 可以多次使用 變成b。如果可以輸出 yes 否則輸出 no 思路 把a和b分別轉換成二進位制,去掉reverse過的b對應的陣列的後導零,我的 沒有reverse,所以去前導零...

51nod1596模擬位運算

1 秒131,072 kb 10 分 2 級題 現在有n個貨物,第i個貨物的重量是 2wi2wi 每次搬的時候要求貨物重量的總和是乙個2的冪。問最少要搬幾次能把所有的貨物搬完。樣例解釋 1,1,2作為一組。3,3作為一組。收起單組測試資料。第一行有乙個整數n 1 n 10 6 表示有幾個貨物。第二行...

51nod 1435 位數階乘

原題鏈結 1435 位數階乘 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 x是乙個n位數的正整數 x a0a 1.an 1 現在定義 x i 0n 1 a i 比如f 135 1 3 5 720.我們給定乙個n位數的整數x 至少有一位數大...