当前位置:网站首页>【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;
} 边栏推荐
- 矩阵分析笔记(二)
- Simpledateformat has thread safety problems in multi-threaded environments.
- Five star certification! Know that Chuangyu has passed the evaluation of the content audit service system of China Academy of Communications
- 【Qt】第十章:数据库
- Univariate quadratic equation to gauge field
- WIN11 系统所有快捷键说明
- 三一重能科创板上市:年营收102亿 市值470亿
- 杰理之DAC 输出方式设置【篇】
- 企业如何做好业务监控?
- Leetcode 1218. 最长定差子序列(提供一种思路)
猜你喜欢

Improving efficiency or increasing costs, how should developers understand pair programming?

TT voice landing Zadig: open source co creates helm access scenario, and environmental governance can be done!

基于QT实现的图形学绘制系统 文档+项目源码及可执行EXE文件+系统使用说明书
![[QT] Chapter 10: Database](/img/54/54b815b5d117a12ab7c9ce9c29eb65.png)
[QT] Chapter 10: Database

亚香香料深交所上市:市值40亿 鼎龙博晖与涌耀投资是股东

对比学习(Contrastive Learning)综述

STM32(九)------- CAN

【華中科技大學】考研初試複試資料分享

STM32 (VIII) -- PWM output

What does logistics service and management mainly learn
随机推荐
After the Computer College changed its examination, the College of Cyberspace Security also changed its examination! Nanjing University of technology computer postgraduate entrance examination
STM32 (VIII) -- PWM output
Leetcode 1218. Longest definite difference subsequence (providing an idea)
TimerTasks笔记
指标(复杂指标)定义和模型
QT实现基于规则的机器翻译系统 课程论文+任务书+项目源码
Une fois que le port série de Jerry est réglé, le Code aléatoire est imprimé, et le cristal interne n'est pas étalonné [chapitre]
【Qt】第三、四章:窗口部件、布局管理
[sword finger offer] 46 Translate numbers into strings
PISCES: A Programmable, Protocol-Independent Software Switch(总结)
高级计网笔记(三)
Set up your own website (13)
盛科通信IPO过会:年营收4.6亿 中国振华与产业基金是股东
Asynchronous or thread pool
Deep understanding of padding
各种解背包问题
js25题目
NetCF总结
STM32(九)------- CAN
Revelation: Bezos' business logic and leadership rules