1315 合法整数集
传送门
题意
分析
简单的异或题。将每一个输入的数二进制分解,统计每位上1出现的个数,最后与x的为1的位比较
trick
1.如果输入的数ret|x>x,那么不用考虑
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,x,ans;
int a[35],b[35];
int main()
{
scanf("%d %d",&n,&x);
int ret,cnt;
for(int i=1;i<=n;++i)
{
scanf("%d",&ret);
//printf("%d\n",ret|x);
if((ret|x)>x) continue;
cnt=0;
//puts("flag");
while(ret) { a[cnt++]+=ret&1;ret>>=1; }
}
//for(int i=0;i<10;++i) printf("%d\n",a[i]);
cnt=0;
while(x)
{
b[cnt++]=x&1;x>>=1;
}
ans=0x3f3f3f3f;
for(int i=0;i<35;++i) if(b[i]) ans=min(ans,a[i]);
if(ans==0x3f3f3f3f) ans=0;
printf("%d\n",ans);
return 0;
}
一直地一直地往前走