为了能到远方,脚下的每一步都不能少.|

lucky_cloud

园龄:1年4个月粉丝:1关注:3

📂题解
🔖数学
2023-11-14 13:08阅读: 23评论: 0推荐: 0

CF467B Fedor and New Game

前言

传送门

本题思维难度:橙。

本题代码难度:橙或红。

综合难度:橙。

本人代码码量位居第二,但是呢,我的空格多,所以,还不来看一下?

题意

根据题目,若两人一人有 \(j\),一人没 \(j\),则异或后,第 \(j\) 位为 \(1\)

那么,题目转化为:已知有 \(m + 1\) 个数,求出满足 \(a_i\) 异或 \(a_{m + 1}\) 结果的 \(1\) 的个数小于等于 \(k\) 这样的 \(i\) 的个数。其中 \(1 \le i < m + 1\)

分析

题意转化的差不多了。简单模拟即可。

我们并不需要使用 std::bitset

这里,我们引入一个函数 __builtin_popcount(),可以计算一个整数二进制下有多少个 \(1\)

Code

#include <bits/stdc++.h>
using namespace std;
const int N = 5005;
int n, m, k, a[N], ans;
int main() {
cin >> n >> m >> k;
m++;
for (int i = 1; i <= m; i++) cin >> a[i];
for (int i = 1; i < m; i++)
if (__builtin_popcount(a[i] ^ a[m]) <= k)
ans++;
cout << ans;
return 0;
}

本文作者:lucky_cloud

本文链接:https://www.cnblogs.com/luckycloud/p/17831385.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   lucky_cloud  阅读(23)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起