洛谷2114 bzoj3668[NOI2014]起床困难综合症
题目描述
21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳。作为一名青春阳光好少年,atm一直坚持与起床困难综合症作斗争。通过研究相关文献,他找到了该病的发病原因: 在深邃的太平洋海底中,出现了一条名为drd的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间。 正是由于drd的活动,起床困难综合症愈演愈烈, 以惊人的速度在世界上传播。为了彻底消灭这种病,atm决定前往海底,消灭这条恶龙。历经千辛万苦,atm终于来到了drd所在的地方,准备与其展开艰苦卓绝的战斗。drd有着十分特殊的技能,他的防御战线能够使用一定的运算来改变他受到的伤害。具体说来,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受到多少伤害。
输入输出样例
3 10
AND 5
OR 6
XOR 7
1
说明
【样例说明】
atm可以选择的初始攻击力为 0,1, … ,10。
假设初始攻击力为 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。
一句话题意
找一个小于M 的数 使它经过N次给定的 and or xor 运算后的结果最大。
做法
位运算中一个数的各个位上的数是不互相干扰的。
就是说对应位置结果只和对应位置初始值有关系,所以我们打一个表,每个位置是0或1 运算后的对应结果。
这儿有一个机灵的做法,预处理 A=0,B=(1<<31)-1 的运算结果 ,这就是天然的表了。 (挺好想的吧,一个是0的表,一个是1的……) (这无关紧要,弄个数组也没问题的)
表打完后采取贪心的策略,
从高位向低位贪心。
如果在该位上 0的结果是1 那么在这位放上0 ,如果只有1的结果是1,判断一下总和是否超过了M再累加答案。
代码
#include<bits/stdc++.h>
#define MAXN 100005
using namespace std;
int N,M,A=,B=(<<)-,tmp,ans,sum;
char s[];
int main()
{
scanf("%d%d",&N,&M);
for(int i=;i<=N;i++){
scanf("%s%d",s,&tmp);
if(s[]=='A')A&=tmp,B&=tmp;
if(s[]=='O')A|=tmp,B|=tmp;
if(s[]=='X')A^=tmp,B^=tmp;
}
for(int i=;i>=;i--){
bool f1=A&(<<i),f2=B&(<<i);
if(!(f1||f2))continue; //很不幸0和1的结果都是0
if(f1){ans+=(<<i);continue;} //0的结果可以为1
if(sum+(<<i)<=M)ans+=(<<i),sum+=(<<i); //只有1的结果为1,先判断一下总和小于M
}
printf("%d\n",ans);
return ;
}
这次没有吐槽
这题真的没有什么要注意的小细节了。
//它和我去年看到的一道水题P2326 AKN’s PPAP很像,那个题题面也挺好玩的。
对了,我是起床困难综合征晚期
推送
http://music.163.com/#/song/430053896/?userid=476005944
悠哉日常~悠哉~悠哉
歌手:泠鸢yousa / Hanser / 泠鸢yousaの呆萌忆
洛谷2114 bzoj3668[NOI2014]起床困难综合症的更多相关文章
- bzoj3668: [Noi2014]起床困难综合症
从高位到低位枚举期望的应该是ans最高位尽量取一.如果该数最高位为o的话能够取得1直接更新ans否则判断该位取1是否会爆m不会的话就加上. #include<cstdio> #includ ...
- bzoj千题计划238:bzoj3668: [Noi2014]起床困难综合症
http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这..一位一位的来就好了呀 #include<cstdio> #include&l ...
- [Bzoj3668][Noi2014]起床困难综合症(位运算)
3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2612 Solved: 1500[Submit][St ...
- [bzoj3668][Noi2014]起床困难综合症/[洛谷3613]睡觉困难综合症
来自FallDream的博客,未经允许,请勿转载,谢谢. 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综 ...
- [BZOJ3668] [Noi2014] 起床困难综合症 (贪心)
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
- BZOJ3668: [Noi2014]起床困难综合症(贪心 二进制)
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2708 Solved: 1576[Submit][Status][Discuss] Descript ...
- BZOJ3668 [Noi2014]起床困难综合症 【贪心】
题目 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因 ...
- [bzoj3668][Noi2014][起床困难综合症] (按位贪心)
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
- [bzoj3668][Noi2014]起床困难综合症_暴力
起床困难综合征 bzoj-3668 Noi-2014 题目大意:题目链接. 注释:略. 想法:Noi考这题...联赛T1难度.... 我们将每个门上的数二进制拆分. 发现:当前位的操作可能直接确定了当 ...
随机推荐
- vue安装以及配置
今天又重新做了一遍vue的安装步骤: 1.条件,vue需要安装在node环境里面,确保安装了node. 2.安装脚手架. 找一个文件夹,放你的项目.待会儿安装的时候,项目会在你找的这个文件下新增一个你 ...
- 修改Myeclies作者用户名
首先点击 windos 点击 preferences 依次点击左侧 Java -> Code Style -> Code Templates 击右侧Comments,将其中的Types项, ...
- Android S5PV210 fimc驱动分析 - fimc_capture.c
fimc_capture.c在FIMC系统中的位置,网上偷来的一幅图片 http://blog.csdn.net/kickxxx/article/details/7733482 43 static c ...
- 论文阅读《End-to-End Learning of Geometry and Context for Deep Stereo Regression》
端到端学习几何和背景的深度立体回归 摘要 本文提出一种新型的深度学习网络,用于从一对矫正过的立体图像回归得到其对应的视差图.我们利用问题(对象)的几何知识,形成一个使用深度特征表示的代价量(c ...
- Ubuntu 15.10 安装Qt5.5.1
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50300447 本人使用的ubuntu系 ...
- java整型byte,short,int,long取值范围大小
byte 1个字节 short 2个字节 int 4个字节long 8 个字节 varchar 可变长度的非Unicode数据,最长为8000个字符nvarchar 可变长度Unicode数据,最长 ...
- [Google Guava] 2.2-新集合类型
转自:并发编程网 原文链接:http://ifeve.com/google-guava-newcollectiontypes/ 链接博客其他文章中还有更多的guava其他功能的描述,有空可慢慢看. G ...
- PC端 java 开发蓝牙所遇到的问题
由于项目的原因.要在电脑上开发一个通过蓝牙传送数据的client.我採用的是JAVA,JSME开发. client:去搜素蓝牙信号,然后找到对应的蓝牙信号进行连接. 服务端:client须要进行连接的 ...
- Knockout源代码精析-怎样解析demo元素,获取到bindings(二)?
接上文这里開始分析applyBindingsToNodeInternal.applyBindingsToNodeInternal方法例如以下: function applyBindingsToNode ...
- javase复习
一.总结封装 封装就是将数据和操作数据的方法绑定起来,通过private修饰数据,这样对数据的访问只能通过定义的操作数据的方法get/set来操作数据. 封装优点:1.由于将数据进行了封装,隐藏了不必 ...