起床困难综合征(按位贪心)
思路:从0-M中选出一个数使得其求多个位运算后的最大值,位运算当时是按位去算,那么我们要使得最后答案尽可能就从高位向低位枚举看这个位能不能填1,我们首先假设从M中选的是每一位全0和每一位全1,经过几次位运算后,得到最后的答案,通过这个答案我们就可以观察出最后的答案ans的每一位到底是选1还是0,如果此时选0或者1都可以那么选0,(优选选全0状态下此位为1的),如果不行的话,我们看看当m中选出的这个数的这一位是1的时候能不能使答案的这一位是1。
#pragma GCC optimize(2)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include<iostream>
#include<vector>
#include<queue>
#include<map>
#include<stack>
#include<iomanip>
#include<cstring>
#include<time.h>using namespace std;
typedef long long ll;
#define SIS std::ios::sync_with_stdio(false)
#define space putchar(' ')
#define enter putchar('\n')
#define lson root<<1
#define rson root<<1|1
typedef pair<int,int> PII;
const int mod=1e9+7;
const int N=2e6+10;
const int M=1e3+10;
const int inf=0x3f3f3f3f;
const int maxx=2e5+7;
const double eps=1e-6;
int gcd(int a,int b)
{return b==0?a:gcd(b,a%b);
}ll lcm(ll a,ll b)
{return a*(b/gcd(a,b));
}template <class T>
void read(T &x)
{char c;bool op = 0;while(c = getchar(), c < '0' || c > '9')if(c == '-')op = 1;x = c - '0';while(c = getchar(), c >= '0' && c <= '9')x = x * 10 + c - '0';if(op)x = -x;
}
template <class T>
void write(T x)
{if(x < 0)x = -x, putchar('-');if(x >= 10)write(x / 10);putchar('0' + x % 10);
}
ll qsm(int a,int b,int p)
{ll res=1%p;while(b){if(b&1)res=res*a%p;a=1ll*a*a%p;b>>=1;}return res;
}
ll f0=0,f1=-1;int main()
{ll n,m;scanf("%lld%lld",&n,&m);for(int i=0;i<n;i++){char ch[20];ll x;scanf("%s%lld",ch,&x); if(ch[0]=='A') f0&=x,f1&=x;else if(ch[0]=='O') f0|=x,f1|=x;else if(ch[0]=='X') f0^=x,f1^=x;}ll ans=0;for(int i=32;i>=0;i--){if(f0>>i&1) ans+=(1ll<<i);else if((f1>>i&1ll)&&(1ll<<i)<=m) ans+=(1ll<<i),m-=(1ll<<i);}printf("%lld\n",ans);return 0;
}
起床困难综合征(按位贪心)相关推荐
- BZOJ 3668: [Noi2014]起床困难综合症【二进制+贪心】
3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MB Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症 ...
- CH0104 起床困难综合症(位运算典例)
传送门:起床困难综合症 思路:要知道位运算永远只会改变本位,与其它位泾渭分明.据此,我们不难看出,每个位仅有1.0两种状态,在全部运算后,寻找两种状态的最大结果即可. #include<cstr ...
- 起床困难综合征(位运算)
具体说来,drd 的防御战线由 nn 扇防御门组成.每扇防御门包括一个运算 opop 和一个参数 tt,其中运算一定是 OR,XOR,AND 中的一种,参数则一定为非负整数.如果还未通过防御门时攻击力 ...
- P2114-[NOI2014]起床困难综合症【位运算】
正题 题目大意 若干个位操作,求一个值xxx使得进行了以后的最大值. 解题思路 每位分开运算计算出每一位为0和为1时的结果,然后贪心选择. codecodecode // luogu-judger-e ...
- 2017.10.19 起床困难综合征 思考记录
2333noi送分题 首先暴力试每个数有些二进制位是会重复算的,,所以就考虑能否把每个二进制位独立考虑 老性质:二进制运算每一位独立 所以二进制dp,如果这一位输入1,是多少,输入0,是多少 然后按二 ...
- Luogu2114 [NOI2014]起床困难综合症 【位运算】
题目分析: 按位处理即可 代码: 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 105000; ...
- 起床困难综合症(位运算)
题目链接 AcWing 998. 题意:最初攻击力不知道,给定m次位运算操作,计算经过m次位运算操作后的最大值. 思路:在代码顶部 混合位运算不具有分配律,交换律,结合律 // 存在多个不同的位运算符 ...
- 起床困难综合症(位运算
题目 结果的第k位只与初值的第k位有关 #include<bits/stdc++.h> using namespace std; #define int long long const i ...
- 解题报告 『[NOI2014]起床困难综合症(位运算)』
原题地址 虽说是NOI的题目,但其实并不难,所以解析我就写在代码里了. 代码实现如下: //本题应首先将数拆为二进制. #include <bits/stdc++.h> using nam ...
最新文章
- java导入lucene_如何导入lucene的.jar包 ?
- 攻防世界dice_game(pwn)
- 2022 WebRTC发展趋势分析
- getopt长参数(长选项)获取不到参数BUG
- Swoole 源码分析——Server模块之初始化
- 在.Net项目中使用Redis作为缓存服务
- arcgis xml 下载 切片_GIS开发:Arcgis的切片格式
- mysql志新计划,在使用Perl DBI迭代结果集时更新MySQL表是否安全?
- 一步步优化JVM四:决定Java堆的大小以及内存占用
- emacs coding UTF-8 保存报错
- 鸿蒙渊 灵兽经验,【转】[攻略]传奇世界灵兽升级经验汇总
- JAVA-JDK环境变量配置
- python 图片处理模块_python Image 模块处理图片
- 靠窗座位订票技能和退票省钱技能
- win10 如何扫描,win10 如何打印,win10找到设备和打印机,
- 计算机病毒的自述,电脑的自述作文500字
- HTC View 手柄操作简介
- 搭建网络流量监控cacti
- Ckfinder+2.1+Ckeditor+3.6.2+配置详解(.NET)
- 用Python形象地解决酒缸分酒问题