1315 合法整數集(位運算)

2021-09-27 08:20:31 字數 828 閱讀 8092

乙個整數集合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為或操作。

現在給你乙個集合y與整數x的值,問在集合y至少刪除多少個元素能使集合y合法?

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

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

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

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

輸入樣例

5 7124

78輸出樣例

2為了讓集合的所有子集不等於所給的值,所以要去算這個原集合會對這個數二進位製所在位的貢獻

如果乙個數|所給的數大於所給數時,由於其|任何數不會等於所給數,那麼這個數是不需要刪除的

之後計算所有 (x|y)<=y 的數,然後選擇最小的那個

#includeusing namespace std;

int a[1010];

int n,x,tmp,ans=0x3f3f3f3f,tip;

int main()

}tip=0;

while(x)

cout

}

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為或...

1315 合法整數集

例如 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...

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