cf769D(枚举&位或运算)
2024-09-04 18:09:19
题目链接:http://codeforces.com/problemset/problem/769/D
题意:求给出的 n 个数中有多少对数字的二进制形式恰好有 k 位不同
思路:两个数a, b的二进制形式恰好 k 位不同即 a ^ b 中 1 的个数,那么可以枚举.注意 n 为 1e5 枚举 ai 会tle,不过 ai 的范围是 1e4,显然有大量重复的元素;
可以先去重并记录每个元素出现的次数,再枚举每个元素即可;
代码:
#include <iostream>
#include <stdio.h>
#define ll long long
using namespace std; const int MAXN = 1e5 + ;
ll a[MAXN], vis[MAXN]; int BitCount(unsigned int n){//求 n 二进制中 1 的数目
unsigned int tmp = n - ((n >> ) & ) - ((n >> ) & );
return ((tmp + (tmp >> )) & ) % ;
} int main(void){
int n, k, x, indx = ;
ll ans = ;
scanf("%d%d", &n, &k);
for(int i = ; i < n; i++){
scanf("%d", &x);
if(!vis[x]) a[indx++] = x;
vis[x]++;
}
for(int i = ; i < indx; i++){
if(k == ){
ans += (vis[a[i]] - ) * vis[a[i]] / ;
continue;
}
for(int j = i + ; j < indx; j++){
int cnt = a[i] ^ a[j];
if(k == BitCount(cnt)) ans += vis[a[i]] * vis[a[j]];
}
}
printf("%lld\n", ans);
return ;
}
最新文章
- 多线程之任务: Task 基础, 多任务并行执行, 并行运算(Parallel)
- 计算程序总行数的Python代码
- java.logging的重定向?
- UITableViewController和延时执行、自定义控件
- [CF#250 Div.2 D]The Child and Zoo(并查集)
- MySQL 配置优化
- linux中预留的$变量
- qmake的使用(可设置c编译器flag参数)
- [转][Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法
- SqlServer获取表结构语句
- Java RMI详解
- C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)
- Pain for friend
- 同步特定源代码到 omni_rom源代码目录里面
- LDAP协议
- BZOJ1115:[POI2009]石子游戏Kam(博弈论)
- 老李分享:android app自动化测试工具合集
- python-ansible api2.0 多进程执行不同的playbook
- jvm - 垃圾回收
- python学习------面向对象进阶
热门文章
- JavaScript判断图片是否加载完成的三种方式 (转)
- swift实现AES解密
- block implicitly retains self to indicate this is 警告消除
- 利用ThinkPHP做项目步骤
- the art of seo(chapter eleven)
- listen 73
- 机器学习:simple linear iterative clustering (SLIC) 算法
- BZOJ_3671_[Noi2014]随机数生成器_set+贪心
- C++正确的cin输入
- bzoj 3230 相似子串 —— 后缀数组+二分