51nod 1315 合法整數集(數字)

2021-09-21 06:29:04 字數 613 閱讀 2651

【思路】

既然是or操作,將數轉化為二進位制,數字是1,對應的陣列元素+1,再將x轉為成二進位制,只要查詢x為1的位置,將之前存放的陣列數字找個最小的輸出就可以了。

但是並不是所有的數都要參與or,因為有些數的位數》x,顯然這些數是不用刪除的,所以不用讓這些數加到陣列裡。還有哪些數呢?當有些數的位數是1,而x對應的位數是0,這些數也是一定不用刪除的。綜合以上只要滿足(x|xx)> x就可以參與or。

【code】

#include using

namespace

std;

int a[35

];int

main()

}c = 0

;

while

(m)

printf(

"%d\n

", ans);

return0;

}

posted @

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為或操作。...