题目传送门
题外
建议橙题。
思路
题目说如果二进制最多有 k k k 位不同就可以成为朋友,那么这题的思路就是暴力。
枚举第 i i i 位士兵与 Fedor 异或为 1 1 1。如果位数 ≤ k \le k ≤k,答案加 1 1 1。
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=5e3+5;
int n,m,k,s;
int a[maxn];
int ans;
int cnt(int x,int t){
int b=0;//统计异或为1的个数
while(t!=0||x!=0){//转换为二进制
b+=((t%2)^(x%2));
t/=2;
x/=2;
}
if(b<=k){
return 1;
}
return 0;
}
signed main(){
cin>>n>>m>>k;//输入
for(int i=1;i<=m;i++){
cin>>a[i];
}
cin>>s;
for(int i=1;i<=m;i++){//每个点跑一遍
ans+=cnt(a[i],s);
}
cout<<ans<<endl;
return 0;
}