51nod 1315 合法整數集

2021-08-04 06:21:57 字數 638 閱讀 4045

先從數字中去掉與x進行或運算結果不為x的數字,因為這樣的數字肯定在x的某些個為0的位置上數值為1,無論如何也是去不掉的。

然後計算出x的二進位制位哪些位置為1,然後從剩下那堆數字中計算x為1的位置那些數字在相應位置也為1的數字的個數。比如x二進位制位的第二位為1,就計算出那些數字中有幾個數字第二位為1。如果x的每個為1的位置所對應的數字個數都不為0,則一定能夠通過或運算計算出x。從中選出最小的就是結果。如果有些個數為0的,則無法或運算得出x,結果就是0

#include 

using

namespace

std;

typedef

long

long ll;

ll num[55];

ll x;

ll numcnt;

int calen(ll num)

int main()

int res = 55;

for(int i = 0; i < xlen; ++i)

if(cnt == 0)

if(cnt < res)

res = cnt;

}cout

<< res << endl;

return

0;}

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 合法整數集

乙個整數集合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 合法整數集

這道題 一開始 沒有思路 然後 根據他人啟發 問我什麼要需要刪 什麼不需要刪 什麼不需要刪 根據 或 運算性質 如果 兩個數相或 只要任意一位二進位制數字為1 那麼對應結果二進位制位必然 為1 那麼這麼說 我乙個數如果和x相或 是x發生改變了 那麼這個數 必然是不要刪的 是x二進位制數字為0的那一位...