题面传送门

解决思路

首先我们可以得出,$ a $ \(\&\) $ x $ \(=\) $ a $ \(\&\) $ x $ \(\&\) $ x $。由此得知,同一个 \(a\) 反复 \(\&\) \(x\) 是没有意义的。所以我们得到,答案仅可能是以下几种情况:

  • \(ans = 0\) ,即有相同的数字,不需要操作。
  • \(ans = 1\) ,即对于某个 \(a_i\) \(\&\) $ x $ \(=\) \(a_j\),其中 $1 \le i,j\le n $ 且 \(j \ne i\) 。
  • \(ans = 2\) ,即对于某两个 \(a_i\) \(\&\) $ x $ \(=\) \(a_j\) \(\&\) $ x $ ,其中 $1 \le i,j\le n $ 且 \(j \ne i\) 。
  • \(ans = -1\) ,即对于任意的 \(a_i\) \(\&\) $ x $ \(\ne\) \(a_j\) \(\&\) $ x $ ,其中 $1 \le i,j\le n $ 且 \(j \ne i\) 。

有了这个思路,再看到\(a_i \le 10^5\) ,我们就可以借助桶存下每个 \(a_i\) \(\&\) $ x $ ,然后判断即可。

AC Code

#include<bits/stdc++.h>
using namespace std;
int n,x,a[100005],t[100005],t2[100005],fl;
//t储存a[i]&x,t2用于判重(ans=0的情况)
int main(){
scanf("%d%d",&n,&x);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(t2[a[i]]!=0){
printf("0");
return 0; //ans=0的情况
}
t2[a[i]]++;
if((a[i]&x)!=a[i]) t[a[i]&x]++; //a[i]&x=a[i]的不能计算在内
if(t[a[i]&x]>=2) fl=1; //如果出现过两次,就必有解
}
for(int i=1;i<=n;i++){
if(t[a[i]]>0){
printf("1"); //ans=1的情况
return 0;
}
}
if(fl==1) printf("2"); //有解
else printf("-1"); //无解
return 0;
}

最新文章

  1. centos为用户增加ssh key
  2. Shell : debug
  3. margin塌陷现象
  4. 对象序列化成Json字符串 及 反序列化成对象
  5. ACM Longest Repeated Sequence
  6. 【其它】 MathJax - 网页中显示数学公式的终极武器
  7. org.apache.http.conn.HttpHostConnectException: Connection to http://localhost refused in android
  8. 使用ContentProvider管理联系人------搜索联系人
  9. js中Number数字数值运算后值不对
  10. CSS_position
  11. 0723掰棒子记录--vue的数据渲染
  12. Docker bridge br0 pipework
  13. 二十一、Linux 进程与信号---进程资源限制
  14. Java 二进制数据转成文件
  15. POJ 1321 棋盘问题 (dfs)
  16. MAC下Xcode配置opencv(2017.3.29最新实践,亲测可行)(转)
  17. C++ 多态Polymorphism 介绍+动态绑定、静态绑定
  18. 从零实现Lumen-JWT扩展包(序):前因
  19. 自适应瀑布型布局(手机,PC全兼容)
  20. 最全的Spring AOP

热门文章

  1. ClickHouse与Elasticsearch压测实践
  2. 四 多例模式【Multition&#160;Pattern】&#160;来自CBF4LIFE 的设计模式
  3. VS 正则匹配快速查询
  4. Java控制台打印三角形
  5. Linux之Samba服务器搭建
  6. 面试突击84:Spring 有几种事务隔离级别?
  7. MinIO Docker 快速入门
  8. go-fastdfs和配套使用的web页面
  9. 解决RHEL7.3系统找不到yum命令,无法使用YUM源的问题
  10. 第四章:Django表单 - 4:表单的Widgets