题目地址:

https://www.acwing.com/problem/content/description/1000/

212121世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳。作为一名青春阳光好少年,atm一直坚持与起床困难综合症作斗争。通过研究相关文献,他找到了该病的发病原因: 在深邃的太平洋海底中,出现了一条名为drd的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间。正是由于drd的活动,起床困难综合症愈演愈烈, 以惊人的速度在世界上传播。为了彻底消灭这种病,atm决定前往海底,消灭这条恶龙。历经千辛万苦,atm终于来到了drd所在的地方,准备与其展开艰苦卓绝的战斗。drd有着十分特殊的技能,他的防御战线能够使用一定的运算来改变他受到的伤害。具体说来,drd的防御战线由nnn扇防御门组成。每扇防御门包括一个运算opopop和一个参数ttt,其中运算一定是∣,∧,&|,\land,\&∣,∧,&中的一种,参数则一定为非负整数。如果还未通过防御门时攻击力为xxx,则其通过这扇防御门后攻击力将变为xoptx\ op\ tx op t。最终drd受到的伤害为对方初始攻击力xxx依次经过所有nnn扇防御门后转变得到的攻击力。由于atm水平有限,他的初始攻击力只能为000到mmm之间的一个整数(即他的初始攻击力只能在0,1,…,m0,1,…,m0,1,…,m中任选,但在通过防御门之后的攻击力不受mmm的限制)。为了节省体力,他希望通过选择合适的初始攻击力使得他的攻击能让drd受到最大的伤害,请你帮他计算一下,他的一次攻击最多能使drd受到多少伤害。

输入格式:
第111行包含222个整数,依次为n,mn,mn,m,表示drd有nnn扇防御门,atm的初始攻击力为000到mmm之间的整数。接下来nnn行,依次表示每一扇防御门。每行包括一个字符串opopop和一个非负整数ttt,两者由一个空格隔开,且opopop在前,ttt在后,opopop表示该防御门所对应的操作,ttt表示对应的参数。

输出格式:
输出一个整数,表示atm的一次攻击最多使drd受到多少伤害。

数据范围:

由于位运算是按位做的,不同位上的数之间互相不影响,所以可以暴力枚举每个位上的数,如果是000的话,最后会变成什么,如果是111的话,最后会变成什么。接下来倒着推输入,顺便算出答案。显然,由于我们需要让最后答案尽可能地大,所以在不超过mmm的情况下,要设计输入使得结果的尽可能高的位成为111,设输入是000。我们从高位到低位进行遍历,然后贪心地对xxx的当前位取值。如果当前位是000的话能使得最后答案在当前位成为111,那显然xxx在这一位应该是000;如果当前位是111的话能使得最后答案在当前位成为111,那么要考虑一下使得xxx当前位是111的话,会不会超出mmm的界,如果不会超出,则输入在此位应当为111,并且令xxx在这一位为111。代码如下:

#include <iostream>
#include <bitset>
using namespace std;int n, m;int main() {bitset<30> zero, one;zero.reset();one.set();scanf("%d%d", &n, &m);while (n--) {string s;int x;cin >> s >> x;if (s == "AND") zero &= x, one &= x;else if (s == "OR") zero |= x, one |= x;else zero ^= x, one ^= x;}int res = 0;for (int i = 30, x = 0; i >= 0; i--)// 如果当前位是0就能使得答案在当前位为1,那x的当前位就是0;// 如果当前位是1才能使得答案在当前位为1,那要判断一下会不会出界,如果没出界,就令x在当前位为1if (zero[i]) res |= 1 << i;else if (one[i] && x + (1 << i) <= m) {res |= 1 << i;x += 1 << i;}printf("%d\n", res);return 0;
}

时间复杂度O(n)O(n)O(n),空间O(1)O(1)O(1)。

【ACWing】998. 起床困难综合症相关推荐

  1. AcWing 998. 起床困难综合症

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 AcWing 998. 起床困难综合症 输入格式 输出格式 代码 总结 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现 ...

  2. 位运算——起床困难综合症

    传送门:998. 起床困难综合症 - AcWing题库 思路:因为每一位的操作都是互相独立的,所以从高位到低位枚举范围内的每一位,分别求取0或1的情况的最终答案,该位取1的情况下要保证和已经求出来的前 ...

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

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

  4. [BZOJ3668][Noi2014]起床困难综合症 贪心

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2409  Solved: 1360 [Submit][ ...

  5. 洛谷 P2114 [NOI2014]起床困难综合症 解题报告

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

  6. # 起床困难综合症(二进制枚举+按位求贡献)

    起床困难综合症(二进制枚举+按位求贡献) 题意:n扇门,每扇门包括一个运算op和数x,玩家有一个初始攻击力[0,m],经过n扇门后的值为最终伤害值.给出n和m,求最大伤害值. code: #inclu ...

  7. [NOI2014] 起床困难综合症

    水题的题解也水...... 原题链接:洛谷 P2114 [NOI2014]起床困难综合症 位运算每一位之间互不干扰. 经过所有门之后每一位不外乎四种结果:一定是0,一定是1,不变或取反. 按位枚举,贪 ...

  8. 洛谷P2114 [NOI2014]起床困难综合症

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

  9. BZOJ 3668: [Noi2014]起床困难综合症【二进制+贪心】

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MB Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症 ...

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

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2547  Solved: 1460 [Submit][ ...

最新文章

  1. GDCM:gdcm::FileMetaInformation的测试程序
  2. php验证卡号,PHP验证信用卡卡号是否正确函数
  3. 学python的正确方法_学习Python最正确的步骤(0基础必备)
  4. VMweare 典型创建 Kali Linux 虚拟机
  5. linux环境下创建postgis数据库,Linux下安装Postgis数据库
  6. c/c++教程 - 1.8 函数 形参 实参 值传递 声明调用 函数的分文件编写
  7. 2022“点点点”测试员如何上岸测试开发岗?附完整学习路线!
  8. 拥有16年开发经验,我都使用了什么工具?[最近更新:2017-10-12]
  9. GameOfMir俗称GOM引擎源代码全套完整版
  10. github加速脚本
  11. Kali linux 局域网arp断网攻击
  12. 5x2cv配对t检验(5x2cv paired t test)
  13. 13种老人不适合带孩子_这13种老人真的不适合带孩子 这些老人带孩子后果不堪设想...
  14. 记成功安装win10+elementary双系统
  15. 使用CollapsingToolbarLayout高仿稀土掘金个人中心页
  16. 大数据开发的前景和就业如何?该如何去学习它?
  17. 会议信息 | BigBrain研讨会 September 21-23, CEST, 线上
  18. IPFS云服务器预售登录系统,北宁ipfs云算力预售,IPFS社区社区
  19. 【题解】CQ大神原创的一道题
  20. LeetCode 137.Single Number II 只出现一次的数字 II

热门文章

  1. 邮件服务器超级用户,Postfix邮件服务器的安装与配置方法
  2. 零基础数据挖掘入门-二手车价格预测part(一):EDA-数据探索性分析
  3. 测试移动硬盘的真实容量的软件,移动硬盘容量标识有猫腻:实际缩水99%
  4. linux下好玩或者好用的小工具
  5. GPIO推挽输出和开漏输出模式区别详解
  6. 大数据与云计算的理解与基本认识
  7. 我的世界服务器如何开无限小号,实操神技能,微信能“无限”开小号?
  8. postgres 退出_Postgresl选择正确的关闭模式
  9. Excel--indirect函数(间接引用)
  10. 【极学】托马斯的《生命不可承受之轻》