【思路】
既然是or操作,將數轉化為二進位制,數字是1,對應的陣列元素+1,再將x轉為成二進位制,只要查詢x為1的位置,將之前存放的陣列數字找個最小的輸出就可以了。
但是並不是所有的數都要參與or,因為有些數的位數》x,顯然這些數是不用刪除的,所以不用讓這些數加到陣列裡。還有哪些數呢?當有些數的位數是1,而x對應的位數是0,這些數也是一定不用刪除的。綜合以上只要滿足(x|xx)> x就可以參與or。
【code】
#include usingposted @namespace
std;
int a[35
];int
main()
}c = 0
;
while
(m)
printf(
"%d\n
", ans);
return0;
}
2018-07-21 11:54
lesroad 閱讀(
...)
編輯收藏
51nod 1315 合法整數集
乙個整數集合s是合法的,指s的任意子集subs有fun subs x,其中x是乙個固定整數,fun a 的定義如下 a為乙個整數集合,設a中有n個元素,分別為a0,a1,a2,an 1,那麼定義 fun a a0 or a1 or or an 1 fun 0,即空集的函式值為0.其中,or為或操作。...
51nod 1315 合法整數集
先從數字中去掉與x進行或運算結果不為x的數字,因為這樣的數字肯定在x的某些個為0的位置上數值為1,無論如何也是去不掉的。然後計算出x的二進位制位哪些位置為1,然後從剩下那堆數字中計算x為1的位置那些數字在相應位置也為1的數字的個數。比如x二進位制位的第二位為1,就計算出那些數字中有幾個數字第二位為1...
51Nod 1315 合法整數集
乙個整數集合s是合法的,指s的任意子集subs有fun subs x,其中x是乙個固定整數,fun a 的定義如下 a為乙個整數集合,設a中有n個元素,分別為a0,a1,a2,an 1,那麼定義 fun a a0 or a1 or or an 1 fun 0,即空集的函式值為0.其中,or為或操作。...