还挺简单的。

发现这几个二进制运算并不会进位,所以我们从高到低按位贪心,一位一位计算贡献。

发现$2^{30}$刚好大于$1e9$,所以最多只要算29位。

首先算出一个全都是$0$的二进制数和一个全都是$1$的二进制数通过所有的门之后每一位的情况,可以压成两个变量做。

最后贪心的时候先看看这一位取$0$能不能取到$1$,再看看这一位取$1$能不能取到$1$,如果可以就算上消耗$m$的代价取这个$1$。

因为高位取$1$一定比低位取$1$优,所以算出来的一定是最好答案。

一个每一位全都是$1$的二进制数可以通过机器补码的特性写成$-1$。

时间复杂度$O(nlogMaxInt)$。

Code:

#include <cstdio>
#include <cstring>
using namespace std; int n, m, v1, v0; int main() {
// freopen("testdata.in", "r", stdin); scanf("%d%d", &n, &m);
v0 = , v1 = -; for(int i = ; i <= n; i++) {
char op[]; scanf("%s", op);
int now; scanf("%d", &now);
if(op[] == 'A') v1 &= now, v0 &= now;
if(op[] == 'O') v1 |= now, v0 |= now;
if(op[] == 'X') v1 ^= now, v0 ^= now;
} int ans = ;
for(int i = ; i >= ; i--) {
if((v0 >> i) & ) ans += ( << i);
else if(((v1 >> i) & ) && ( << i) <= m) m -= ( << i), ans += ( << i);
} printf("%d\n", ans);
return ;
}

最新文章

  1. QQ空间HD(5)-添加左侧菜单栏内容
  2. Java - 安全的退出线程
  3. Nodejs学习总结
  4. Java HttpGet
  5. 程序进入 EXPORT App_Fault_ISR的原因及措施:
  6. git常用命令[持续更新]
  7. Sass占位符选择器`%`
  8. 解决:Incorrect line ending: found carriage return (\r) without corresponding newline (\n)
  9. 自定义配置文件的使用(web.config/app.config)
  10. mysql数据库表结构与表约束
  11. Non-decreasing Array
  12. 六 java和Tomcat
  13. spring boot 扫描不到自定义Controller
  14. Perl包和模块(内容来自beginning perl)
  15. centos6.9安装mysql5.7.18
  16. csrf 攻击和防御
  17. 区块链 + 大数据:EOS存储
  18. Visualforce控制器
  19. Oracle为表或字段添加备注
  20. Python 文件操作一

热门文章

  1. 剑指offer--16.数组中重复的数字
  2. hdoj-1285-确定比赛名次(拓扑排序)
  3. 2018.7.6 TX射频调试-PP
  4. 网络基础之网络协议篇---CS架构--网络通信--osi 协议---套接字socket--粘包
  5. 统计数字noip2007
  6. [ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件
  7. BZOJ4520:[CQOI2016]K远点对
  8. HTML(超文本标记语言)
  9. Azure RBAC管理ASM资源
  10. java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结