51nod1315(位运算)
2024-08-27 10:02:14
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1315
题意:中文题诶~
思路:位或(|)运算是二进制位有一个为1就为1,否则为0.你们我们不难想到如果大于k的元素加入运算中其结果一定大于k, 与k异或结果大于k的元素加入运算中其结果一定不为k, 所以我们只要考虑剩下的元素就好了。剩下的也不难想到,对于当前二进制位,若k为1,那么我们可以把所有当前二进制位为1的元素去掉,其子集异或结果一定不为k;若k为0,那么我们可以把所有当前二进制位为0的元素去掉,其子集异或结果一定不为k. 我们只要取这些选择中最优的就是答案啦。。。
代码:
#include <bits/stdc++.h>
#define MAXN 60
using namespace std; int a[MAXN]; int main(void){
int n, k, ans=, x, pos=;
cin >> n >> k;
for(int i=; i<n; i++){
cin >> x;
if(x<=k&&(x|k)<=k){//**注意这里的括号一定不能少,被坑惨了。。。
a[pos++]=x;
ans|=x;
}
}
if(!pos||ans<k){
cout << << endl;
return ;
}
sort(a, a+pos);
int cnt=n, key;
while(k){
int cc=, gg=;
for(int i=; i<pos; i++){
if(!a[i]){
continue;
}
if(a[i]%){
cc+=;
}else{
gg+=;
}
a[i]>>=;
}
key=k%;
k>>=;
if(key){ //***k当前二进制位为1,我们可以选择把所有当前位二进制为1的元素删掉
cnt=min(cnt, cc);
}else{ //***k当前二进制位为0,我们可以选择把所有当前位二进制为0的元素删掉
cnt=min(cnt, gg);
}
}
cout << cnt << endl;
return ;
}
最新文章
- Android随笔之——按键长按事件onKeyLongPress
- Recylerview的使用系列教程
- [转]JavaScript字符串函数大全
- 外国类似stackoverflow这样的网站访问慢怎么解决-遁地龙卷风
- 移动开发流量省起来之Zepto
- Oracle linux6.1配置yum本地源
- 计算机图形学——OpenGL开发库开发库
- VS编译出现 HTTP 错误 403.14 - Forbidden 决绝办法
- linux学习笔记之进程
- 异常关闭MyEclipse 8.6后,不能重启
- (2) 用DPM(Deformable Part Model,voc-release4.01)算法在INRIA数据集上训练自己的人体检測模型
- 201521123097《Java程序设计》第九周学习总结
- 或许你不知道的10条SQL技巧
- node之querystring模块
- MongoDB + Express 环境搭建记
- Django之CRM项目Day4-编辑客户 公私户 模糊查询
- jmeter connection reset解决方法
- github上总结的python资源列表【转】
- java 代码获取视频时长
- http协议下载文件
热门文章
- Hibernate学习---第十三节:hibernate过滤器和拦截器的实现
- Java_异常_05_ OutOfMemoryError: Java heap space
- Java企业微信开发_00_源码及资源汇总贴
- BEC listen and translation exercise 49
- gcc 4.8.5安装
- 【leetcode刷题笔记】Gas Station
- [Ural1099]工作安排 带花树
- bzoj 1941 Hide and Seek —— K-D树
- bzoj 3157 &; bzoj 3516 国王奇遇记 —— 推式子
- UML核心元素--包