洛谷 U140602 屠龙
作者:互联网
洛谷 U140602 屠龙
题目背景
“你知道什么叫做‘屠龙少年终成恶龙’么?”SeawaySeawa**y指着一道毒瘤题如是说道。为了贯彻“毒瘤出题人biss”的方针,SeawaySeawa**y带领FDF**D少年团,毅然决然地踏上了屠龙的征途。
题目描述
历经千辛万苦,SeawaySeawa**y带着JZWJZW和XDX**D终于来到了恶龙所在的地方,并准备与其展开艰苦卓绝的战斗。但是,恶龙有着十分特殊的技能,他的防御战线能够反弹一定的伤害。具体地,防线会使用一定的运算来改变恶龙所受到的伤害。具体说来,防御战线由nn扇防御门组成。每扇防御门的配置包括一个运算opo**p和一个参数tt,其中运算一定是\text{OR},\text{XOR},\text{AND}OR,XOR,AND中的一种,参数一定为非负整数。
防线的工作原理是这样的:对于一道攻击、一扇防御门来讲:如果还未通过防御门时攻击力为xx,则其通过这扇防御门后攻击力将变为x\ op\ tx o**p t。最终恶龙受到的伤害为对方初始攻击力xx依次经过所有nn扇防御门后转变得到的攻击力。
由于SeawaySeawa**y水平有限,他的初始攻击力只能为00到mm之间的一个整数。但在通过防御门之后的攻击力不受mm的限制)。为了节省体力,他希望通过选择合适的初始攻击力使得他的攻击能让恶龙受到最大的伤害,请你帮他计算一下,他的一次攻击最多能使恶龙受到多少伤害。
输入格式
从文件fuckdragon.infuckdrago**n.i**n中读入数据。
第一行包括两个正整数nn和mm。nn表示防御门个数,mm表示初始攻击力为00到mm。接下来的nn行描述每一扇防御门。每行包括空格隔开的一个字符串opo**p和一个非负整数tt。
输出格式
输出到文件fuckdragon.outfuckdrago**n.out中。
一行一个整数,表示SeawaySeawa**y发动的一次攻击最多使得恶龙受到多少伤害。
命题背景:
不是防弹少年团(狗头保命)
是F**k Dragon少年团
题解:
位运算性质:按位独立。
所以可以分别预处理每一位是0时是什么结果,是1时什么结果。然后从最高位到最低位贪心就行了。
代码:
#include<cstdio>
#define int long long
using namespace std;
int n,m,t;
char s[10];
int x=0,y=(1ll<<30)-1;
int ans;
signed main()
{
scanf("%lld%lld",&n,&m);
while(n--)
{
scanf("%s%lld",s+1,&t);
if(s[1]=='A')
x&=t,y&=t;
else if(s[1]=='O')
x|=t,y|=t;
else
x^=t,y^=t;
}
for(int i=32;i>=0;i--)
{
if(x&(1ll<<i))
ans+=(1ll<<i);
else if(y&(1ll<<i)&&(1ll<<i)<=m)
{
m-=(1ll<<i);
ans+=(1ll<<i);
}
}
printf("%lld\n",ans);
return 0;
}
标签:洛谷,nn,攻击力,mm,U140602,SeawaySeawa,防御,恶龙,屠龙 来源: https://www.cnblogs.com/fusiwei/p/13994452.html