起床困难综合症(洛谷)

题目

题目描述

drd的防御战线由n扇防御门组成。每扇防御门包括一个运算op和一个参数t,其中运算一定是OR,XOR,AND中的一种,参数则一定为非负整数。如果还未通过防御门时攻击力为x,则其通过这扇防御门后攻击力将变为x op t。最终drd受到的伤害为对方初始攻击力x依次经过所有n扇防御门后转变得到的攻击力。由于atm水平有限,他的初始攻击力只能为0到m之间的一个整数(即他的初始攻击力只能在 0, 1, … , m中任选,但在通过防御门之后的攻击力不受m的限制)。为了节省体力,他希望通过选择合适的初始攻击力使得他的攻击能让drd受到最大的伤害,请你帮他计算一下,他的一次攻击最多能使drd受到多少伤害。

输入格式

输入文件的第 1 行包含 2 个整数,依次为n, m,表示 drd 有n扇防御门,atm 的初始攻击力为0到m之间的整数。
接下来n行,依次表示每一扇防御门。每行包括一个字符串op和一个非负整数t,两者由一个空格隔开,且op在前,t在后,op表示该防御门所对应的操作,t表示对应的参数。

输出格式

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

样例

样例1输入
3 10
AND 5
OR 6
XOR 7
样例1输出
1

样例1解释

假设初始攻击力为 4,最终攻击力经过了如下计算:

  1. 4 AND 5 = 4
  2. 4 OR 6 = 6
  3. 6 XOR 7 = 1

类似的,我们可以计算出初始攻击力为 1,3,5,7,9 时最终攻击力为 0,初始攻击力为 0,2,4,6,8,10 时最终攻击力为 1,因此atm的一次攻击最多使drd受到的伤害值为1。

数据范围

分析

这一道题要用 位运算,位运算的主要特点之一就是在二进制表示下不进位,所以初始攻击力可以从高位到低位,依次考虑每一位填0还是1。
因为要让攻击力尽量大,所以最好填1,但是如果填1进行n次位运算后结果不为1,则填0更好。
注意:还要判断最高位填1会不会超出m的范围。

AC代码+注释

#include<bits/stdc++.h>
using namespace std;long long n,m,x,val=0,ans=0,res0,res1;
char str[5];
pair<string,long long> a[100005];long long calc(long long bit, long long now)
{for (long long i=1;i<=n;i++){x=a[i].second>>bit&1;if(a[i].first=="AND")now&=x;else{if(a[i].first=="OR"){now|=x;}else{now^=x;}}}return now;
}int main()
{scanf("%lld%lld",&n,&m);for(long long i=1;i<=n;i++){scanf("%s%lld",str,&x);a[i]=make_pair(str,x);}for(long long bit=29;bit>=0;bit--){res0=calc(bit,0);res1=calc(bit,1);if(val+(1<<bit)<=m&&res0<res1){val+=1<<bit;ans+=res1<<bit;}elseans+=res0<<bit;}printf("%lld",ans);
}

“起床困难综合症”「NOI2014」【题解】相关推荐

  1. 【题解】洛谷P2114 [NOI2014]起床困难综合症

    前往:我自己搭建的博客 题目 洛谷P2114 [NOI2014]起床困难综合症 题解 题意简化为:在0~m之间找一个数,使得这个数在一系列操作后最大. 由于原数有大小限制,又要使得到的数尽量大,为了充 ...

  2. 「LG2114」起床困难综合症

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

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

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

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

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

  5. 【NOI2014】起床困难综合症

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

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

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

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

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

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

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

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

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

最新文章

  1. 41-高级路由:BGP AS长度:接收一切、最大AS长度、不比较AS长度
  2. git push throws error: RPC failed; result=22, HTTP
  3. 如何用css让一个容器水平垂直居中
  4. 乐行科技获1.08亿元A轮融资,并推出艾特好车
  5. matlab练习程序(LMS)
  6. tensorflow 模型的保存和加载
  7. 【Linux】一步一步学Linux——lastb命令(99)
  8. JavaScript进阶5-学习笔记
  9. Python闭包与javascript闭包比较
  10. 软考:项目中的常见问题
  11. Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别
  12. DNS加速之“智能DNS”跟“双线加速”、“CDN加速”的区别
  13. Python(八)阶段小结
  14. lf模型下声门脉冲matlab程序,数字语音处理及MATLAB仿真.rar第二章
  15. python怎么设置dos_Windows下Python环境的配置和Dos界面的调用
  16. 五百亿!又一大型平台崩了!85后女老板跑路!
  17. 【笔记】关于汉字注音 汉字转拼音,首拼
  18. 2021-02-03-linux命令
  19. JS中NaN定义与用法
  20. 元宇宙十大技术及其产业

热门文章

  1. 4G DTU之 MODBUS设置
  2. 2021年6月 第一个月的学习记录与感想
  3. 借助Bing Translate API翻译API实现网站多国语言翻译功能
  4. 博奥导出工程项目电子表格_博奥清单导出Excel后单位批量替换
  5. python定义向量内积函数_python – 沿多维数组的一维向量点积
  6. dd命令 备份和恢复磁盘 linux系统下
  7. Echarts 地图json数据汇总
  8. 宝马旗下MINI数字化萌宠Spike亮相上海车展
  9. 中秋节的静态html页面
  10. python对文件的操作(一)序列化和反序列化