Description

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 受到多少伤害。

Input

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

Output

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

Sample Input

3 10

AND 5

OR 6

XOR 7

Sample Output

1

HINT

【样例说明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。

0<=m<=10^9

0<=t<=10^9

一定为OR,XOR,AND 中的一种

【运算解释】

在本题中,选手需要先将数字变换为二进制后再进行计算。如果操作的两个数二进制长度不同,则在前补0至相同长度。OR为按位或运算,处理两个长度相同的二进制数,两个相应的二进制位中只要有一个为1,则该位的结果值为1,否则为0。XOR为按位异或运算,对等长二进制模式或二进制数的每一位执行逻辑异或操作。如果两个相应的二进制位不同(相异),则该位的结果值为1,否则该位为0。 AND 为按位与运算,处理两个长度相同的二进制数,两个相应的二进制位都为1,该位的结果值才为1,否则为0。

例如,我们将十进制数5与十进制数3分别进行OR,XOR 与 AND 运算,可以得到如下结果:

0101 (十进制 5) 0101 (十进制 5) 0101 (十进制 5)

OR 0011 (十进制 3) XOR 0011 (十进制 3) AND 0011 (十进制 3)

= 0111 (十进制 7) = 0110 (十进制 6) = 0001 (十进制 1)

Solution

做这题是为了给接下来的睡觉困难综合症做铺垫

因为题目的三个运算都是一位对一位,不影响其它位上的,所以直接按位贪心

从高到低位,枚举开始的时候是0还是1,最后的结果是什么,只要 \(m\) 还够用,就贪心选

我改进了一下,最开始直接做两遍,一遍所有位置都是0,一遍所有位置都是1,得到最后结果,然后按位直接贪心,这样只要做两遍暴力,快一些

#include<bits/stdc++.h>
#define ll long long
#define db double
#define ld long double
const int MAXN=100000+10;
int n,m,ans;
struct node{
char opt[5];
int t;
};
node door[MAXN];
template<typename T> inline void read(T &x)
{
T data=0,w=1;
char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
x=data*w;
}
template<typename T> inline void write(T x,char c='\0')
{
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
if(c!='\0')putchar(c);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline int atack(int x)
{
for(register int i=1;i<=n;++i)
if(door[i].opt[0]=='A')x&=door[i].t;
else if(door[i].opt[0]=='O')x|=door[i].t;
else x^=door[i].t;
return x;
}
int main()
{
read(n);read(m);
for(register int i=1;i<=n;++i)scanf("%s",door[i].opt),read(door[i].t);
int res0=atack(0),res1=atack((1<<30)-1);
for(register int i=29;i>=0;--i)
if(res0&(1<<i))ans|=(1<<i);
else if((res1&(1<<i))&&(1<<i)<=m)ans|=(1<<i),m-=(1<<i);
write(ans,'\n');
return 0;
}

【刷题】BZOJ 3668 [Noi2014]起床困难综合症的更多相关文章

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

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

  2. BZOJ 3668: [Noi2014]起床困难综合症【贪心】

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2326  Solved: 1305[Submit][St ...

  3. BZOJ 3668: [Noi2014]起床困难综合症

    Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2693 Solved: 1563 [Submit][Status][Discuss] Descript ...

  4. 3668: [Noi2014]起床困难综合症

    3668: [Noi2014]起床困难综合症 https://www.lydsy.com/JudgeOnline/problem.php?id=3668 分析: 每一位分开考虑. 算出每一位为1,计算 ...

  5. 【BZOJ】3668: [Noi2014]起床困难综合症(暴力)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这题很简单.............. 枚举每一位然后累计即可.. QAQ,第一次以为能1A, ...

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

    分析:按位贪心即可. program sleep; var a,g:..]of longint; n,i,m,ans,t,len,x,y,v:longint; c:char; s:string; e: ...

  7. bzoj千题计划238:bzoj3668: [Noi2014]起床困难综合症

    http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这..一位一位的来就好了呀 #include<cstdio> #include&l ...

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

    从高位到低位枚举期望的应该是ans最高位尽量取一.如果该数最高位为o的话能够取得1直接更新ans否则判断该位取1是否会爆m不会的话就加上. #include<cstdio> #includ ...

  9. NOI2014 起床困难综合症

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 225  Solved: 153[Submit][Stat ...

随机推荐

  1. java项目部署之后,Jar包中配置文件修改

    Java项目发布时,配置文件不像.net项目一样与工程路径保持一致,而是直接包含在了jar包中,此时要修改就没那么方便了,我们可以将配置文件从jar包抽离出来,修改完之后再写入Jar包即可, 也没那么 ...

  2. SSL详解

    SSL 1.整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下 SSL:(Secure Socket Layer,安全套接字层),为Netscape所研发,用以保障在Int ...

  3. 最安全的聊天工具——Cryptocat

    关于Cryptocat Cryptocat 是啥?Cryptocat,俗称 "加密猫",是一款非常注重安全的聊天软件. 美国前中情局员工斯诺登在躲避美国政府追捕过程中,就是使用 C ...

  4. spring boot 使用及最佳实践

    第一部分,spring boot 文档 Spring boot的使用 使用maven进行构建 用户可以通过继承spring-boot-starter-parent来获取默认的依赖. l  默认java ...

  5. Java的POI的封装与应用

    Java对Excel表格的导出一直是对我有种可怕噩梦的东西,每次对要建立行与列,并一个一个放值,我是从心底拒绝的. 处于项目需求,需要导出表格,于是找到网上一版很好的开发, <不想用POI?几行 ...

  6. IEEE1588 verision 2 报文介绍

    PTP 报文 PTP verision 2 报文是由 报头 / header,主体 / body 和 报尾 / suffix 组成,报尾长度可能为 0 ; PTP verision 2 报文在 ver ...

  7. FinTech领域实践:乐维监控助力西南某上市城商行IT运维转型升级!

    FinTech领域实践:乐维监控助力西南某上市城商行IT运维转型升级! 项目背景 随着信息化的逐步深入,企业业务运营活动对IT的依赖程度越来越高,传统的局部.粗放.碎片化的IT运维管理模式已经无法满足 ...

  8. Scrum Meeting 10.27

    1.会议内容: 姓名 今日任务 明日任务 预估时间(h) 徐越 配置SQLserver 学习本地和服务器之间的通信 4 卞忠昊 找上届代码的bug 学习安卓布局(layout)的有关知识,研究上届学长 ...

  9. 奔跑吧DKY——团队Scrum冲刺阶段-Day 3

    今日完成任务 各个成员今日完成的任务(如果完成的任务为开发或测试任务,需给出对应的Github代码签入记录截图:如果完成的任务为调研任务,需给出对应的调研总结博客链接:如果完成的任务为学习技术任务,需 ...

  10. Android笔记-2-TextView的属性详解

    [Android 基础]TextView的属性详解 android:autoLink :设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web / ...