先從數字中去掉與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的那一位...