当前位置:网站首页>【NOI2014】15.起床困难综合症【二进制】
【NOI2014】15.起床困难综合症【二进制】
2022-06-23 17:51:00 【致命小学期】
题目描述:
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。
数据范围

在本题中,选手需要先将数字变换为二进制后再进行计算。如果操作的两个数二进制长度不同,则在前补 00 至相同长度。
- OR 为按位或运算,处理两个长度相同的二进制数,两个相应的二进制位中只要有一个为 1,则该位的结果值为 1,否则为 0。
- XOR 为按位异或运算,对等长二进制模式或二进制数的每一位执行逻辑异或操作。如果两个相应的二进制位不同(相异),则该位的结果值为 1,否则该位为 0。
- AND 为按位与运算,处理两个长度相同的二进制数,两个相应的二进制位都为 1,该位的结果值才为 1,否则为 0。
例如,我们将十进制数 5 与十进制数 3 分别进行 OR、XOR 与 AND 运算,可以得到如下结果:
0101 (十进制 5)
OR 0011 (十进制 3)
= 0111 (十进制 7)
0101 (十进制 5)
XOR 0011 (十进制 3)
= 0110 (十进制 6)
0101 (十进制 5)
AND 0011 (十进制 3)
= 0001 (十进制 1)
解法一:
转化为二进制数,枚举每一位,看它为0 还是 1时 可以使经过n扇门时为1 。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;//门的最大值
ll ans,power[N];//答案 , 权值数组
int n,m,t[N];//n扇门 0-m初始攻击力 输入的数字
int op[N];//输入的运算符
bool fun(int i,int now)//i是位数
{
int temp;
for(int j=1;j<=n;j++)//n门
{
temp =1 & (t[j]>>i);//取出t[j]的第几位数字 从0开始
if(op[j]==1)now=now&temp;
else if(op[j]==2)now=now|temp;
else now=now^temp;
}
return now;
}
int main()
{
cin>>n>>m;//输入门 和 最大攻击力
//输入数字
for(int i=1;i<=n;i++)
{
string s;
cin>>s>>t[i];
if(s[0]=='A')op[i]=1;
else if(s[0]=='O')op[i]=2;
else op[i]=3;
}
//权值数组
power[0]=1;
for(int i=1;i<=31;i++)
{
power[i]=power[i-1]*2;//权重
}
for(int i=31;i>=0;i--)
{
if( fun(i,0) )//第i位 是0,在经过N道门之后变成1
{
ans += power[i];
cout<<ans<<endl;
}
else if(m>power[i] && fun(i,1))
{
ans += power[i],m-=power[i];
cout<<ans<<endl;
}
}
cout<<ans;
return 0;
} 边栏推荐
- leetcode刷题:哈希表05 (四数相加 II)
- DigiCert和GlobalSign单域名OV SSL证书对比评测
- 指标(复杂指标)定义和模型
- PISCES: A Programmable, Protocol-Independent Software Switch(总结)
- IOT platform construction equipment, with source code
- 第十三届蓝桥杯单片机国赛真题
- 计算机学院改考后,网络空间安全学院也改考了!南京理工大学计算机考研
- leetcode刷题:哈希表01 (有效的字母异位词)
- [QT] Chapter 3 and 4: window components and layout management
- leetcode刷题:哈希表02 (两个数组的交集)
猜你喜欢
随机推荐
企业如何做好业务监控?
实用电路分析3
在Microsoft Exchange Server 2007中安装SSL证书的教程
After the Computer College changed its examination, the College of Cyberspace Security also changed its examination! Nanjing University of technology computer postgraduate entrance examination
高级计网笔记(三)
Shell process control - 39. Special process control statements
杰理之进入 soft off 后插拔 sd 卡会复位【篇】
今年,安徽母基金大爆发
如何让一个list根据另一个list的顺序排序
NetSeer:可编程数据平面的流事件遥测笔记
微机原理第八章笔记整理
CV-全连接神经网络
基于QT实现的图形学绘制系统 文档+项目源码及可执行EXE文件+系统使用说明书
杰理之串口设置好以后打印乱码,内部晶振没有校准【篇】
元宇宙大杀器来了!小扎祭出4款VR头显,挑战视觉图灵测试
启示录《贝索斯的商业逻辑与领导力法则》
指标(复杂指标)定义和模型
WIN11 系统所有快捷键说明
STM32(八)------- PWM输出
涂鸦智能通过聆讯:拟回归香港上市 腾讯是重要股东









