题目https://www.luogu.org/problemnew/show/P2114

题意:有n个操作,每个可以是与、或、异或 一个数。

初始值是0~m之间的一个数,问经过n个运算之后,可以得到的最大值是多少。

思路:

这个数的某一位不是0就是1,所以我们可以用一个全为1的数和一个全为0的数做n次操作。然后判断这个数的每个位应该是0还是1就行了。

从高位到低位开始贪心。如果0和1都可以得到1的话,就选0,因为这样数比较小之后贪心的选择比较多。

如果只有1可以得到1的话,看看选1的时候这个数会不会超过m了。不超过答案的这一位就可以是1.

 //#include<bits/stdc++>
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdlib.h>
#include<queue>
#include<map>
#include<stack>
#include<set> //#define LL __int128
#define ull unsigned long long
#define inf 0x7f7f7f7f typedef long long LL;
using namespace std; int n, m; int main()
{
scanf("%d%d", &n, &m);
int allone = 0x7fffffff, allzero = ;
for(int i = ; i < n; i++){
char op[];
int t;
getchar();
scanf("%s %d", op, &t);
if(strcmp(op, "AND") == ){
allone &= t;
allzero &= t;
}
else if(strcmp(op, "OR") == ){
allone |= t;
allzero |= t;
}
else{
allone ^= t;
allzero ^= t;
}
}
int ans = , t = ;
for(int i = ; i >= ; i--){
if(allzero & ( << i)){
ans |= ( << i);
}
else if(allone & ( << i) && m >= (t | ( << i))){
ans |= ( << i);
t |= ( << i);
}
}
printf("%d\n", ans);
return ;
}

最新文章

  1. Windows Azure 虚拟机的IP地址操作
  2. jsoup的基本写法
  3. python开发规则
  4. linux 配置 wlan 连接
  5. 数据库的事务、ACID及隔离级别
  6. Unity支持的跨平台
  7. Unity历史
  8. 部署springboot工程到linux上及遇到的坑
  9. Mapreduce的api编程
  10. 公钥与私钥的理解,以及https的应用原理
  11. .gitignore 失效问题解决
  12. gdb 调试及优化
  13. 自定义HttpModule,用于未登录用户,不弹出Windows认证窗口,而是跳转回SSO站点
  14. TSQL--TOP选项
  15. vue 表单 验证 async-validator
  16. HDU 6183 Color it 线段树
  17. 基于minikube的kubernetes集群部署及Vitess最佳实践
  18. 多线程设计模式(三):Master-Worker模式
  19. Jquery获取EasyUI时间控件的值
  20. Luogu 3350 [ZJOI2016]旅行者

热门文章

  1. [转帖]Linux中awk工具的使用
  2. 基于requests模块的代理
  3. Windows10下安装numpy
  4. S03_CH11_基于TCP的QSPI Flash bin文件网络烧写
  5. qt聊天室bug-- error: no matching function for call to &#39;Ui::Widget::setupUi(Widget*)&#39; ui-&gt;setupUi(this); ^
  6. Snort Inline IPS Mode
  7. restTemplate源码解析(三)创建ClientHttpRequest请求对象
  8. K2 BPM_【解决方案】从流程梳理到落地,K2为企业打造流程管理闭环_全业务流程管理专家
  9. Go 函数编程
  10. 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧