給出兩個數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 至少有一位數大...