CSU - 2055 Wells‘s Lottery

Description

As is known to all, Wells is impoverished.
When God heard that, God decide to help the poor Wells from terrible condition.
One day Wells met God in dream, God gave Wells a secret number which will bought Wells a great fortune and gifted Wells an ablility of transforming two lottery tickets x, y into a lottery ticket z (meet the condition that z==x or y).

Wells realized that the number must be the result of lottery, which would be worth ¥5,000,000! Wells was very excited, and can't help sharing this thought. The secret number is X, and Wells has purchase N lottery ticketsa1,a2,a3....aNa1,a2,a3....aN but has not received them yet. And if lucky enough, Wells could pick some numbers of them satisfy that b1orb2orb3....orbk=Xb1orb2orb3....orbk=X, k is the amount of picked numbers.

How ever the owner of the lottery shop called SDJ, who decided to modify the lottery tickets and made Wells lost his fortune. In order to save energy to modify the lottery tickets, SDJ want to know the minimum amount of modification of lottery tickets.

Input

The input only contains one line.
First line contains two positive integers N (N<=105)(N<=105),X (X<=109)(X<=109) ,N means as described above Second line contains N number a1,a2...aN(0<=ai<=109),aia1,a2...aN(0<=ai<=109),ai means the number on i-th lottery tickets.

Output

Output a line only contains minimum amount of modification of lottery tickets.

Sample Input

3 7
4 2 1

Sample Output

1

Hint

It will be accepted after modifying any number.
The "or" in this problem means the bitwise or , for exmple , 0 or 0 = 0 ,0 or 1 = 1 , 1 or 1 = 1 , 3 or 5 =7.

Source

Author

Wells

The meaning of the question: ask how many numbers can be changed at least so that the required number cannot be obtained by the operation of any number.

Idea: Consider each bit of the number, the explanation of ai | X ==X contributes to the answer, and the contribution of all bits of ai that are not 0 +1 can finally output the contribution of all bits of X that are 1 To get the minimum value, after each AI is judged to have contributed, 1-30 bits are for one time to calculate the contribution .

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
using namespace std;
int n, x,m;
int cnt[35];
intmain()
{
	while (~scanf("%d%d", &n, &x))
	{
		memset(cnt, 0, sizeof(cnt));
		int min = (1 << 30);
		
		for (int i = 0; i < n; i++)
		{
			scanf("%d", &m);
			if ((m | x) == x)
			{
				for (int j = 0; (1 << j) <= m; j++)
				{
					if ((1 << j)&m)
						cnt[j]++;
				}
			}
		}
		for (int i = 0; (1<<i) <=x; i++)
		{
			if (((1 << i)&x))
				min = min> cnt [i]? cnt [i]: min;
		}
		printf("%d\n", min);

	}

	return 0;
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325946640&siteId=291194637