51nod 1315 合法整数集
2015-11-12 00:40
197 查看
一个整数集合S是合法的,指S的任意子集subS有Fun(SubS)!=X,其中X是一个固定整数,Fun(A)的定义如下:
A为一个整数集合,设A中有n个元素,分别为a0,a1,a2,...,an-1,那么定义:Fun(A)=a0 or a1 or ... or an-1;Fun({}) = 0,即空集的函数值为0.其中,or为或操作。
现在给你一个集合Y与整数X的值,问在集合Y至少删除多少个元素能使集合Y合法?
例如:Y = {1,2,4},X=7;显然现在的Y不合法,因为 1 or 2 or 4 = 7,但是删除掉任何一个元素后Y将合法。所以,答案是1.
Input
Output
Input示例
Output示例
出现多余的1时,直接掉过,因为选出来不会等于x。。。
然后在符合组成x的个位上,找最小的即可
A为一个整数集合,设A中有n个元素,分别为a0,a1,a2,...,an-1,那么定义:Fun(A)=a0 or a1 or ... or an-1;Fun({}) = 0,即空集的函数值为0.其中,or为或操作。
现在给你一个集合Y与整数X的值,问在集合Y至少删除多少个元素能使集合Y合法?
例如:Y = {1,2,4},X=7;显然现在的Y不合法,因为 1 or 2 or 4 = 7,但是删除掉任何一个元素后Y将合法。所以,答案是1.
Input
第一行两个整数N,X,其中N为Y集合元素个数,X如题所述,且1<=N<=50,1<=X<=1,000,000,000. 之后N行,每行一个整数yi,即集合Y中的第i个元素,且1<=yi<=1,000,000,000.
Output
一个整数,表示最少删除多少个元素。
Input示例
5 7 1 2 4 7 8
Output示例
2
出现多余的1时,直接掉过,因为选出来不会等于x。。。
然后在符合组成x的个位上,找最小的即可
#include<bits/stdc++.h> using namespace std; map<int,int>a,b,c; int main() { int n,num,i,j,ans,k,m,t,t1,t2,ok; cin>>n>>num; ans=100; ok=0; m=num; k=0; while(num) { if(num%2) a[k]++; num=num/2; k++; } t1=k; for(i=1;i<=n;i++) { cin>>t; k=0; if(t>m) continue; while(t) { if(t%2) { if(a[k]==0) break; b[k]=1; } else b[k]=0; k++; t=t/2; } if(t) continue; for(j=0;j<k;j++) { if(b[j]) { c[j]++; } ok=1; } } if(!ok) printf("0\n"); else { for(i=0;i<t1;i++) { if(a[i]) ans=min(ans,c[i]); } printf("%d\n",ans); } return 0; }
相关文章推荐
- scala 并行集合在spark中的应用
- 提升APNS消息推送质量的一些想法和验证程序
- 基础Shader
- 最小子串覆盖
- mysql 获取季度的第一天 本月的第一天,本周的第一天sql语句(转)
- Android 实战 - 个人App乐逗项目 之 查看图片,查看GIF封装
- MySQL 导入导出Execl
- 使用 Build.VERSION.SDK_INT兼容不同版本的API
- 微信分享c++接口&OC实现
- windows配置JDK环境变量
- [python网络编程]使用scapy修改源IP发送请求
- 回射客户端服务器UDP(echo client&&server based on UDP)
- js操作数组1
- MySQL查询本周、上周、本月、上个月份数据的sql代码(转)
- Axure RP 各个版本中文版 汉化包 破解版 下载地址及注册码
- hadoop完全分布式集群+Win Eclipse+Hbase+Hive+Zookeeper+Sqoop+SPARK试验机平台
- Ubuntu14安装Nvidia显卡驱动
- linux命令-rpm安装和卸载
- Quick-Cocos2d-x初学者游戏教程(三)
- Quick-Cocos2d-x初学者游戏教程(二)