1315 合法整數集

2021-07-29 23:18:28 字數 903 閱讀 6758

例如:y = ,x=7;顯然現在的y不合法,因為 1 or 2 or 4 = 7,但是刪除掉任何乙個元素後y將合法。所以,答案是1.

input

第一行兩個整數n,x,其中n為y集合元素個數,x如題所述,且1<=n<=50,1<=x<=1,000,000,000.

之後n行,每行乙個整數yi,即集合y中的第i個元素,且1<=yi<=1,000,000,000.

output

乙個整數,表示最少刪除多少個元素。

input示例

5 7

1 2

4 7

8 output示例

2去年的時候沒讀懂題目- -

只要理解位運算 瞬間這個問題就會簡化

我們為了讓這個集合的所有子集合不等於所給的值

所以,我們要去算這個原集合可能會對這個數二進位製所在位的貢獻。

當然 如果乙個數或所給的數大於所給的數的時候,這個數是不需要被刪除的,因為它的二進位制or任何數也不會等於所給數。

因為它有所給數0的位置是1,or操作進行的時候,無法等於所給數。

之後我們計算所有(x|y)<=y 的數 對y所在二進位制的貢獻。

選擇最小的那個。

#include 

using

namespace

std;

long

long d[50];

void run(long

long x)

}int main()

long

long l=0,w=m;

long

long minx=1000000000;

// for(int i=0;i<35;i++) cout//cout<}

}

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

先從數字中去掉與x進行或運算結果不為x的數字,因為這樣的數字肯定在x的某些個為0的位置上數值為1,無論如何也是去不掉的。然後計算出x的二進位制位哪些位置為1,然後從剩下那堆數字中計算x為1的位置那些數字在相應位置也為1的數字的個數。比如x二進位制位的第二位為1,就計算出那些數字中有幾個數字第二位為1...