cf769D(枚举位或运算)
题目链接:http://codeforces.com/problemset/problem/769/D
题意:求给出的 n 个数中有多少对数字的二进制形式恰好有 k 位不同
思路:两个数a, b的二进制形式恰好 k 位不同即 a ^ b 中 1 的个数,那么可以枚举.注意 n 为 1e5 枚举 ai 会tle,不过 ai 的范围是 1e4,显然有大量重复的元素;
可以先去重并记录每个元素出现的次数,再枚举每个元素即可;
代码:
1 #include <iostream> 2 #include <stdio.h> 3 #define ll long long 4 using namespace std; 5 6 const int MAXN = 1e5 + 10; 7 ll a[MAXN], vis[MAXN]; 8 9 int BitCount(unsigned int n){//求 n 二进制中 1 的数目 10 unsigned int tmp = n - ((n >> 1) & 033333333333) - ((n >> 2) & 011111111111); 11 return ((tmp + (tmp >> 3)) & 030707070707) % 63; 12 } 13 14 int main(void){ 15 int n, k, x, indx = 0; 16 ll ans = 0; 17 scanf("%d%d", &n, &k); 18 for(int i = 0; i < n; i++){ 19 scanf("%d", &x); 20 if(!vis[x]) a[indx++] = x; 21 vis[x]++; 22 } 23 for(int i = 0; i < indx; i++){ 24 if(k == 0){ 25 ans += (vis[a[i]] - 1) * vis[a[i]] / 2; 26 continue; 27 } 28 for(int j = i + 1; j < indx; j++){ 29 int cnt = a[i] ^ a[j]; 30 if(k == BitCount(cnt)) ans += vis[a[i]] * vis[a[j]]; 31 } 32 } 33 printf("%lld\n", ans); 34 return 0; 35 }
View Code
转载于:https://www.cnblogs.com/geloutingyu/p/6979081.html
cf769D(枚举位或运算)相关推荐
- c语言同或与异或,同或、异或、位移、按位与、按位或运算
同或运算 运算法则:相同为1,不同为0 运算符号:⊙ 表达式:a⊙b=ab+a'b'(a'为非a,b'为非b): 异或运算 运算法则:相同为0,不同为1 运算符号:⊕ 表达式 :a⊕b=a'b+ab' ...
- c语言 枚举,位运算
c语言 枚举,位运算 枚举 枚举类型的定义和枚举变量的说明 一.枚举的定义枚举类型定义的一般形式为 二.枚举变量的说明 枚举类型变量的赋值和使用 位运算 位域 一.位域的定义和位域变量的说明 二.位域 ...
- 【opencv-python】 cv2.bitwise_or(...)图像算术运算--按位或运算
[opencv-python] cv2.bitwise_or图像算术运算--按位或运算 1.背景 2.参数 3.示例 1.背景 详细文档,请查阅官方资料. 本博客尽可能地简单明了,如有错误,欢迎指正. ...
- Swift学习笔记 - 位移枚举的按位或运算
在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 ...
- poj 1950 Dessert(dfs枚举,模拟运算过程)
/* 这个代码运行的时间长主要是因为每次枚举之后都要重新计算一下和的值! 如果要快的话,应该在dfs,也就是枚举的过程中计算出前边的数值(这种方法见第二个代码),直到最后,这样不必每一次枚举都要从头再 ...
- java 枚举 或运算_Objective-C 枚举 中位运算 的使用
前言 Enum,也就是枚举,从C语言开始就有了,C++.Java.Objective-C.Swift这些语言,当然都有对应的枚举类型,功能可能有多有少,但是最核心的还是一个--规范的定义代码中的状态. ...
- 蓝桥备赛第一周2021.1.11 递归 枚举 位运算
文章目录 递归实现指数型枚举 递归指数型枚举 方法1:肯定是2^n行,所以直接就是上一个动态m从0到n加一堆空行 方法2:以最新的值为n为结束,遇到为0的不输出,用完要恢复为0 递归实现排列型枚举 非 ...
- ()逻辑与、()按位与运算、(||)逻辑或、(|)按位或运算
&& 表示逻辑与,即and,当符号(&&)两边的结果都为真时,整个运算结果为真,如果有一边为假则结果为假. 通常表示为: if(条件1 && 条件2). ...
- vijos1197-费解的开关【递推,枚举,位运算】
正题 题目链接:https://vijos.org/p/1197 大意 有5*5个开关,每次选择一个地方时它和它上下左右的开关都会取反,求将所有开关都变成1的最少次数. 解题思路 首先我们知道一个位置 ...
最新文章
- 图灵奖得主LeCun力推无监督学习:要重视基于能量的学习方法
- 《Akka应用模式:分布式应用程序设计实践指南》读书笔记1
- 02-vue过滤器和键盘修饰符
- 滚动联动-单独滚动与文档滚动
- mysql update 加减乘除运算
- 201712-1最小差值
- 解决VM 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VM 的方法
- java js websocket_js+java websocket记录
- httpclient 手写
- 固定dll的加载基址的方法
- 选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装到GPT磁盘
- 路由器服务器修改密码,TP-Link TL-WR842N路由器设置密码
- react 输入框 回车事件切换
- HoloLens2之路-混合现实技术概述
- GBase 8a 集群维护工具C3介绍
- 商业智能BI能做什么
- Vue+Gojs实现流程图demo
- 从零开始搞起 Disney BRDF源码编译(含踩坑经历)
- TF-IDF 算法详解及 Python 实现
- Redis Cluster(集群)模式下批量删除key
热门文章
- java异常日志不要只打一半,要输出全部错误信息
- 使用DSX2-5000 CH测试时选择(+PoE)和(+All)后缀的含义
- Qt ftp 文件上传工具开发
- 盘点三个JavaScript案例——实现限时秒杀、定时跳转、改变盒子大小
- 数据库:30种SQL语句优化,进阶必备!
- 100+ 值得收藏的 Web 开发资源
- c语言从入门到精通ppt,C语言从入门到精通第1章.ppt
- php linux 缓存文件,Linux下搭建网站提示缓存文件写入失败怎么办?
- 嵌入式C语言基础(三)
- ascii modbus vc源码_MODBUS ASCII及MODBUS RTU通讯