解:m = 0的部分分,直接模拟。有and 0的部分分,直接模拟。<=1000的部分分,枚举攻击力之后模拟。所有操作相同的部分分,可以合并成只有一个操作。然后枚举m或者逐位贪心。

正解是逐位贪心,内层跑一遍1~n个操作。然后后面这个1~n其实可以优化,在外层用00000...0和11111...1来一次性搞完即可。

 #include <bits/stdc++.h>

 const int N = ;

 int a[N], opt[N], n, m;
char str[]; /// 0 AND & 1 OR | 2 XOR ^ namespace m0 {
inline void solve() {
int ans = ;
for(int i = ; i <= n; i++) {
if(opt[i] == ) {
ans = ans & a[i];
}
else if(opt[i] == ) {
ans = ans | a[i];
}
else if(opt[i] == ) {
ans = ans ^ a[i];
}
}
printf("%d\n", ans);
return;
}
} namespace bf {
inline void solve() {
int ans = ;
for(int i = ; i <= m; i++) {
int x = i;
for(int j = ; j <= n; j++) {
if(opt[j] == ) {
x = x & a[j];
}
else if(opt[j] == ) {
x = x | a[j];
}
else {
x = x ^ a[j];
}
}
ans = std::max(ans, x);
}
printf("%d\n", ans);
return;
}
} namespace same {
inline void solve() {
int x = a[];
for(int i = ; i <= n; i++) {
if(opt[i] == ) {
x = x & a[i];
}
else if(opt[i] == ) {
x = x | a[i];
}
else {
x = x ^ a[i];
}
}
int ans = ;
if(m <= ) {
for(int i = ; i <= m; i++) {
if(opt[] == ) {
ans = std::max(ans, i & x);
}
else if(opt[] == ) {
ans = std::max(ans, i | x);
}
else if(opt[] == ) {
ans = std::max(ans, i ^ x);
}
}
}
else {
int now = ;
for(int i = ; i >= ; i--) {
if(opt[] == ) {
if(((x >> i) & ) && (now | ( << i)) <= m) {
now |= ( << i);
}
}
else if(opt[] == ) {
if(((x >> i) & ) == && (now | ( << i)) <= m) {
now |= ( << i);
}
}
else {
if(((x >> i) & ) == && (now | ( << i)) <= m) {
now |= ( << i);
}
}
}
if(opt[] == ) {
ans = x & now;
}
else if(opt[] == ) {
ans = x | now;
}
else {
ans = x ^ now;
}
}
printf("%d\n", ans);
return;
}
} int main() {
bool flag1 = false, flag2 = true;
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) {
scanf("%s%d", str, &a[i]);
if(str[] == 'O') opt[i] = ;
else if(str[] == 'X') opt[i] = ;
else if(a[i] == ) {
flag1 = true;
}
if(i > && opt[i] != opt[i - ]) {
flag2 = false;
}
} if(!m || flag1) {
m0::solve();
return ;
}
if(n <= && m <= ) {
bf::solve();
return ;
}
if(flag2) {
same::solve();
return ;
} int ans = , now = ;
for(int i = ; i >= ; i--) {
int t1 = , t0 = ;
for(int j = ; j <= n; j++) {
if(opt[j] == ) {
t0 &= (a[j] >> i) & ;
t1 &= (a[j] >> i) & ;
}
else if(opt[j] == ) {
t0 |= (a[j] >> i) & ;
t1 |= (a[j] >> i) & ;
}
else {
t0 ^= (a[j] >> i) & ;
t1 ^= (a[j] >> i) & ;
}
}
if(t0) {
ans |= ( << i);
}
else if(t1 && (now | ( << i)) <= m) {
now |= ( << i);
ans |= ( << i);
}
}
printf("%d\n", ans);
return ;
}

AC代码

LOJ#2244 起床困难综合症的更多相关文章

  1. BZOJ-3668 起床困难综合症 位运算+贪心

    faebdc学长杂题选讲中的题目...还是蛮简单的...位运算写的不熟练... 3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 ...

  2. bzoj3668: [Noi2014]起床困难综合症

    从高位到低位枚举期望的应该是ans最高位尽量取一.如果该数最高位为o的话能够取得1直接更新ans否则判断该位取1是否会爆m不会的话就加上. #include<cstdio> #includ ...

  3. NOI2014 起床困难综合症

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 225  Solved: 153[Submit][Stat ...

  4. BZOJ 3668: [Noi2014]起床困难综合症( 贪心 )

    之前以为xor,or,and满足结合律...然后连样例都过不了 早上上体育课的时候突然想出来了...直接处理每一位是1,0的最后结果, 然后从高位到低位贪心就可以了... 滚去吃饭了.. ------ ...

  5. BZOJ 3668: [Noi2014]起床困难综合症【贪心】

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2326  Solved: 1305[Submit][St ...

  6. 【NOI2014】起床困难综合症(贪心)

    [NOI2014]起床困难综合症(贪心) 题面 Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚 ...

  7. Luogu 睡觉困难综合征 ([NOI2014]起床困难综合症)

    一.[NOI2014]起床困难综合症 题目描述 网址:https://daniu.luogu.org/problemnew/show/2114 大意: 有一条链,链上每一个节点包含一个位运算f 与 一 ...

  8. [BZOJ3668] [Noi2014] 起床困难综合症 (贪心)

    Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...

  9. [NOI 2014]起床困难综合症

    Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...

随机推荐

  1. 解析高德地图api获取省市区,生成最新三级联动sql表

    前言: 最近项目中用到了全国省市区三级信息,但是网上找到的信息都是比较旧的信息.与现在最新的地区信息匹配不上.后来想到高德地图上可能有这些信息.所以解析了一下api接口,生成了相关省市区的sql信息. ...

  2. mysql表与表之间数据的转移

    1.相同表结构 INSERT INTO table1 SELECT * FROM table2; 2.不同表结构 INSERT INTO table1(filed1,...,filedn) SELEC ...

  3. java中的重写与重载

    重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...

  4. Golang mysql 上线的一个坑 Db.close重要性

    急冲冲完成的mysql的一个监控自动处理程序上线了,线下处理是正常的,没想到线上才半小时就奔溃了. 现在时间是晚上11点,心慌焦虑涌上心头,需要熬夜?肾上腺素激增. 程序主要是一个定时任务的处理程序, ...

  5. vue源码分析—Vue.js 源码构建

    Vue.js 源码是基于 Rollup 构建的,它的构建相关配置都在 scripts 目录下.(Rollup 中文网和英文网) 构建脚本 通常一个基于 NPM 托管的项目都会有一个 package.j ...

  6. Vue(五)Vue规范

    代码规范很重要 1.组件名应该始终是多个单词的,根组件 App 除外. 2.组件的 data 必须是一个函数. // In a .vue file export default { data () { ...

  7. 分布式存储ceph——(3)ceph常用命令

    1.查看ceph集群配置信息 1 ceph daemon /var/run/ceph/ceph-mon.$(hostname -s).asok config show   2.在部署节点修改了ceph ...

  8. java接口测试入门

    一.什么是接口 接口是前端和后端的数据通道 二.如何获取接口 1.开发不提供接口文档,通过抓包工具比如fiddler进行抓取,如下: 步骤一:设置浏览器(比如火狐)代理 步骤二:设置url过滤器,进入 ...

  9. [Alpha阶段]测试报告

    [Alpha]阶段测试报告 在测试过程中发现的BUG ​ 在最后的测试阶段中,我们不可避免的遇到了各种各样的BUG.虽然大多数都不是严重的BUG,但是这些细枝末节的问题的堆积,依然会很大程度上降低用户 ...

  10. PHP7.0-PHP7.3新特性与变更

    到目前为止,PHP7发布已经升级到7.3,本文来总结一下每个版本的变更与新特性 PHP7.0 1. 组合比较符 (<=>) 组合比较符号用于比较两个表达式.当$a小于.等于或大于$b时它分 ...