解: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. nginx系列6:nginx的进程结构

    nginx的进程结构 如下图: 通过ps –ef | grep nginx可以看到共有三个进程,一个master进程,两个worker进程. nginx是多进程结构,多进程结构设计是为了保证nginx ...

  2. ASP.NET MVC 5 實作 GridView 分頁

    本文用 ASP.NET MVC 5 實作一個 GridView,功能包括: 分頁(paging).關鍵字過濾(filtering).排序(sorting).AJAX 非同步執行,外觀上亦支援 Resp ...

  3. centos7后台服务部署jar包

    centos7 服务部署jar包 centos7 服务介绍 CentOS7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分, 每一个 ...

  4. iBatis第一章:基础知识概述 & MVC思想

    一.java是一门十分受开发人员欢迎的语言,在开发语言排行榜中名列前茅,人们对其看法不尽相同,就我自身感受而言,我觉得java语言的主要优势体现在如下几方面:1.java属于开源语言,开发人员可以找到 ...

  5. 从0开始的Python学习018更多的Python内容

    特殊的方法 之前学习的都是一些常用的方法,为了使我们的学习更加的完整,我们在这里学习一些特殊的方法. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的索引操作( ...

  6. 做优化的数据库工程师请参考!CynosDB的计算层设计优化揭秘

    本文由云+社区发表 本文作者:孙旭,腾讯数据库开发工程师,9年数据库内核开发经验:熟悉数据库查询处理,并发控制,日志以及存储系统:熟悉PostgreSQL(Greenplum,PGXC等).Terad ...

  7. js中innerHTML、outerHTML与innerText的用法与区别

    ____________________________________________________________________________________________________ ...

  8. python接口自动化-Cookie_绕过验证码登录

    前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...

  9. Mysql原理与优化

    原文:https://mp.weixin.qq.com/s__biz=MzI4NTA1MDEwNg==&mid=2650763421&idx=1&sn=2515421f09c1 ...

  10. 好程序员web前端分享12个CSS高级技巧汇总

    好程序员web前端分享下面这些CSS高级技巧,一般人我可不告诉他哦. 使用 :not() 在菜单上应用/取消应用边框 给body添加行高 所有一切都垂直居中 逗号分隔的列表 使用负的 nth-chil ...