Fedor and New Game

来源:互联网 发布:同花顺指标公式源码 编辑:程序博客网 时间:2024/06/04 18:20

Description

After you had helped George and Alex to move in the dorm, they went to help their friend Fedor play a new computer game «Call of Soldiers 3».

The game has (m + 1) players and n types of soldiers in total. Players «Call of Soldiers 3» are numbered form1 to (m + 1). Types of soldiers are numbered from0 to n - 1. Each player has an army. Army of thei-th player can be described by non-negative integerxi. Consider binary representation ofxi: if thej-th bit of number xi equal to one, then the army of thei-th player has soldiers of the j-th type.

Fedor is the (m + 1)-th player of the game. He assume that two players can become friends if their armies differ in at mostk types of soldiers (in other words, binary representations of the corresponding numbers differ in at mostk bits). Help Fedor and count how many players can become his friends.

Input

The first line contains three integers n,m, k(1 ≤ k ≤ n ≤ 20; 1 ≤ m ≤ 1000).

The i-th of the next (m + 1) lines contains a single integer xi(1 ≤ xi ≤ 2n - 1), that describes the i-th player's army. We remind you that Fedor is the(m + 1)-th player.

Output

Print a single integer — the number of Fedor's potential friends.

Sample Input

Input
7 3 18511117
Output
0
Input
3 3 31234
Output
3

x&(1<<j) 表示数a二进制的第j位是什么<pre name="code" class="cpp">(x[i]&(1<<j))^(x[m+1]&(1<<j)) 异或比较两数2进制的第j位,相同为0,相异为1


#include<stdio.h>#include<algorithm>using namespace std;int main(){    int n,m,k,x[1010],i,ans,j;    ans=0;    scanf("%d%d%d",&n,&m,&k);    for(i=1;i<=m+1;i++){        scanf("%d",&x[i]);    }    for(i=1;i<=m;i++){        int temp=0;        for(j=0;j<n;j++){            if((x[i]&(1<<j))^(x[m+1]&(1<<j))){                temp++;            }        }        if(temp<=k){            ans++;        }    }    printf("%d\n",ans);    return 0;}


0 0
原创粉丝点击