51Nod 1315 合法整數集

2021-08-08 22:05:46 字數 1181 閱讀 5581

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

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

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

sample input

5 7

1 2

4 7

8 sample output

2

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int inf = 0x3ffffff;

int f[1000000];

int f1[100000];

void finda(int k)

}//統計二進位制某位上是否為1

void finda1(int k)

}int main()

sort(a+1,a+n+1);

int ans=0,num=0,x1=x;

while(x1!=0)

finda1(x); //x有1的位置f1[i]==1

for(int i=1;i<=n;i++)

int minn=inf;

for(int i=1;i<=num;i++)

printf("%d\n",minn);

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

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

51Nod 1315 合法整數集

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