AcWing 998. 起床困难综合症

2024-01-08 03:36

本文主要是介绍AcWing 998. 起床困难综合症,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题链接

 

其实上面这一堆就是想说,输入 n,m以及 n 个数和该数所对应的运算,其中运算包括有 与、或、异或 三种,真正的问题就是在所有不大于 m 的数(非负数)中,对给定的 n 个数都按该数所对应的运算运算一遍后,能得到得最大的值是多少。

AND 表示按位与,OR 表示按位或,XOR 表示按位异或
 

 Accepted Code:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;const int N=1e6+5;
int n,m;	//门的数量以及攻击力 
int t[N];	//运算的参数 
char str[4];	//存储输入的字符串 
int op[N];	//存储运算操作 
int ans;	//存储答案 bool calc(bool x,int j) {for(int i=0;i<n;i++){if(op[i] == 1) x&=t[i]>>j&1; else if(op[i] == 2) x|=t[i]>>j&1;else x^=t[i]>>j&1;}return x;
}//function:执行各种运算(/*  因为该题的按位与、按位或、按位异或的每次运算只有关该位上的数字,不影响其他位置上的数字又因为C语言的结构特点我们可以从高位到低位来确定数的每一位*/
int main(){scanf("%d %d",&n,&m);for(int i=0;i<n;i++){scanf("\n%s %d",str,t+i);/*标记成整数形方便后续对应是什么运算*/if(*str=='A') op[i]=1;	//与运算 else if(*str=='O') op[i]=2;	  //或运算 else op[i]=3;	//异或运算 }for(int i=29;~i;i--){ if(1<<i<=m){	//伤害不能超出范围 bool x=calc(0,i);   //该位填0的结果bool y=calc(1,i);   //该位填1的结果//哪个数值更大就填哪个if(x>=y)	ans|=x<<i;else ans|=y<<i,m-=1<<i; //(填1的话要让m减去该结果,为了后续只需要继续小等于m)}else ans|=calc(0,i)<<i; //超出范围了只能将该位置置为0}cout<<ans<<endl;return 0;
} 

这篇关于AcWing 998. 起床困难综合症的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582197

相关文章

【AcWing】851. 求最短路

spfa算法其实是对贝尔曼福特算法做一个优化。 贝尔曼福特算法会遍历所有边来更新,但是每一次迭代的话我不一定每条边都会更新,SPFA是对这个做优化。 如果说dist[b]在当前这次迭代想变小的话,那么一定是dist[a]变小了,只有a变小了,a的后继(b)才会变小。 用宽搜来做优化,用一个队列,队列里边存的就是所有变小了的结点(队列里存的是待更新的点)。 基本思路就是我更新过谁,我再拿

【AcWing】852. spfa判断负环

#include<iostream>#include<algorithm>#include<cstring>#include<queue>using namespace std;const int N= 1e5+10;int n,m;int h[N],w[N],e[N],ne[N],idx;int dist[N],cnt[N];//cnt存最短路径的边数bool st[N];v

【困难】 猿人学web第一届 第14题 备而后动-勿使有变

调试干扰 进入题目 打开开发者工具会进入一个无限 debugger; 向上查看堆栈,可以找到生成 debugger 的代码段 手动解混淆后可以知道 debugger 生成的方式 (function () {// 函数内的代码是不需要的,因为里面的代码不会执行}['constructor']('debugger')['call']('action')); 是利用 F

【困难】 猿人学web第一届 第15题 备周则意怠,常见则不疑

数据接口分析 数据接口 https://match.yuanrenxue.cn/api/match/15 请求时需要携带 page 页码,m为加密参数 cookie中没有加密信息,携带 SessionId请求即可 加密参数还原 查看数据接口对应的 requests 栈 m参数 是通过 window.m() 方法执行后得到的 打上断点,查看 window.m() 方法执行了

AcWing 282. 石子合并

必看的视频讲解↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 【E28【模板】区间DP 石子合并——信息学竞赛算法】 合并过程总开销等于红色数字总和,可以理解为花费的总体力! f数组的含义是f【i】【j】是从第i堆石子开始到第j堆石子的花费体力最小值 如何理解三层for呢? 第一层for是控制区间长度len,第二层for是控制区间起点位置i,第三层for是控制区间

AcWing 897. 最长公共子序列

动态规划就是多见识应用题就完事儿了,也没有什么好说的。 讲解参考: 【E05 线性DP 最长公共子序列】 #include<iostream>#include<algorithm>#define N 1010using namespace std;char a[N],b[N];int n,m;int f[N][N];int main(){cin >> n >> m >> a

谈谈如何研究指针 怎么克服指针带来的困难

刚刚写完指针的博客,总是感觉没有完全把我的所有想法讲给大家。 第一,C++的指针对于所有编程人员都是难点,不会或是经常出错是正常的,你的老师也会经常出错。 第二,指针是C++特别的,也是最重要的,如果要学习C++就必须要学指针,如果学C++而不学指针的话,就像学油画不知道色彩一样。 第三,指针可能是所有C++实际编程中最常出现的问题,到时候,你就知道什么就“内存耗尽”

AcWing 2. 01背包问题

一定要看的视频讲解:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 【E08【模板】背包DP 01背包——信息学竞赛算法】 i表示放入i个物品,j表示第j个物品,用于访问体积v【j】 #include <iostream>#include <algorithm>using namespace std;const int N = 1010;int n, m;int v[N]

目标检测之困难目标检测任务综述

深度人工智能 “深度人工智能”是成都深度智谷科技旗下的人工智能教育机构订阅号,主要分享人工智能的基础知识、技术发展、学习经验等。此外,订阅号还为大家提供了人工智能的培训学习服务和人工智能证书的报考服务,欢迎大家前来咨询,实现自己的AI梦!   一、引言 目标检测的重要性及其在计算机视觉中的地位 目标检测在计算机视觉领域内占据着极其重要的地位,它不仅是许多视觉任务的基础,

正则表达式匹配——力扣困难题解

力扣链接:正则表达式匹配 题目描述: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s 的,而不是部分字符串。 解题思路 分析字符串 根据上面的示例,首先我们知道 s s s只包含小写字母; p p p包含小写字母、‘.’ 和 ‘*’