Luogu 2114 [NOI2014]起床困难综合症
2024-08-29 08:04:10
还挺简单的。
发现这几个二进制运算并不会进位,所以我们从高到低按位贪心,一位一位计算贡献。
发现$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 ;
}
最新文章
- QQ空间HD(5)-添加左侧菜单栏内容
- Java - 安全的退出线程
- Nodejs学习总结
- Java HttpGet
- 程序进入 EXPORT App_Fault_ISR的原因及措施:
- git常用命令[持续更新]
- Sass占位符选择器`%`
- 解决:Incorrect line ending: found carriage return (\r) without corresponding newline (\n)
- 自定义配置文件的使用(web.config/app.config)
- mysql数据库表结构与表约束
- Non-decreasing Array
- 六 java和Tomcat
- spring boot 扫描不到自定义Controller
- Perl包和模块(内容来自beginning perl)
- centos6.9安装mysql5.7.18
- csrf 攻击和防御
- 区块链 + 大数据:EOS存储
- Visualforce控制器
- Oracle为表或字段添加备注
- Python 文件操作一
热门文章
- 剑指offer--16.数组中重复的数字
- hdoj-1285-确定比赛名次(拓扑排序)
- 2018.7.6 TX射频调试-PP
- 网络基础之网络协议篇---CS架构--网络通信--osi 协议---套接字socket--粘包
- 统计数字noip2007
- [ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件
- BZOJ4520:[CQOI2016]K远点对
- HTML(超文本标记语言)
- Azure RBAC管理ASM资源
- java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结