“起床困难综合症”「NOI2014」【题解】
起床困难综合症(洛谷)
题目
题目描述
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,最终攻击力经过了如下计算:
- 4 AND 5 = 4
- 4 OR 6 = 6
- 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」【题解】相关推荐
- 【题解】洛谷P2114 [NOI2014]起床困难综合症
前往:我自己搭建的博客 题目 洛谷P2114 [NOI2014]起床困难综合症 题解 题意简化为:在0~m之间找一个数,使得这个数在一系列操作后最大. 由于原数有大小限制,又要使得到的数尽量大,为了充 ...
- 「LG2114」起床困难综合症
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
- [NOI2014] 起床困难综合症
水题的题解也水...... 原题链接:洛谷 P2114 [NOI2014]起床困难综合症 位运算每一位之间互不干扰. 经过所有门之后每一位不外乎四种结果:一定是0,一定是1,不变或取反. 按位枚举,贪 ...
- BZOJ 3668: [Noi2014]起床困难综合症【二进制+贪心】
3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MB Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症 ...
- 【NOI2014】起床困难综合症
[NOI2014]起床困难综合症 [题目描述] 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争 ...
- BZOJ 3668: [Noi2014]起床困难综合症( 贪心 )
之前以为xor,or,and满足结合律...然后连样例都过不了 早上上体育课的时候突然想出来了...直接处理每一位是1,0的最后结果, 然后从高位到低位贪心就可以了... 滚去吃饭了.. ------ ...
- [BZOJ3668][Noi2014]起床困难综合症 贪心
3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2409 Solved: 1360 [Submit][ ...
- 洛谷 P2114 [NOI2014]起床困难综合症 解题报告
P2114 [NOI2014]起床困难综合症 题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作 ...
- 洛谷P2114 [NOI2014]起床困难综合症
P2114 [NOI2014]起床困难综合症 题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作 ...
最新文章
- 41-高级路由:BGP AS长度:接收一切、最大AS长度、不比较AS长度
- git push throws error: RPC failed; result=22, HTTP
- 如何用css让一个容器水平垂直居中
- 乐行科技获1.08亿元A轮融资,并推出艾特好车
- matlab练习程序(LMS)
- tensorflow 模型的保存和加载
- 【Linux】一步一步学Linux——lastb命令(99)
- JavaScript进阶5-学习笔记
- Python闭包与javascript闭包比较
- 软考:项目中的常见问题
- Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别
- DNS加速之“智能DNS”跟“双线加速”、“CDN加速”的区别
- Python(八)阶段小结
- lf模型下声门脉冲matlab程序,数字语音处理及MATLAB仿真.rar第二章
- python怎么设置dos_Windows下Python环境的配置和Dos界面的调用
- 五百亿!又一大型平台崩了!85后女老板跑路!
- 【笔记】关于汉字注音 汉字转拼音,首拼
- 2021-02-03-linux命令
- JS中NaN定义与用法
- 元宇宙十大技术及其产业