LOJ#2244. 「NOI2014」起床困难综合症
2024-10-08 03:28:31
$n \leq 1e5$个位运算操作,$m \le 2^{30}$,问$0-m$中谁进行完所有操作值最大,输出这个最大值。
cfA题难度?当送分题就不管了
and相当于几个位取0,or相当于几个位取1,有几个位是可以确定的;xor相当于翻转,确定的0变1,确定的1变0,不确定的就记一下哪几位被xor了。最后从高到低按位决定这一位要不要填1,如果这一位没确定并且没被异或或者被异或了偶数次就填个1下去,否则不填。
//#include<iostream>
#include<cstring>
#include<cstdio>
//#include<time.h>
//#include<math.h>
//#include<set>
//#include<queue>
//#include<bitset>
//#include<vector>
#include<algorithm>
#include<stdlib.h>
using namespace std; #define LL long long
LL qread()
{
char c; LL s=; int f=; while ((c=getchar())<'' || c>'') (c=='-') && (f=-);
do s=s*+c-''; while ((c=getchar())>='' && c<=''); return s*f;
} //Pay attention to '-' , LL and double of qread!!!! int n,m,a,b,x,ba;
int main()
{
n=qread(); m=qread();
a=ba=(<<)-; b=x=;
char c; int v;
while (n--)
{
while ((c=getchar())!='A' && c!='O' && c!='X');
if (c=='A')
{
c=getchar(); c=getchar();
v=qread(); a&=v; b&=v; x&=v;
}
else if (c=='O')
{
c=getchar();
v=qread(); b|=v; a|=v; x&=ba^v;
}
else if (c=='X')
{
c=getchar(); c=getchar();
v=qread();
for (int i=;i<;i++) if ((v>>i)&)
{
if (((b>>i)&)== && ((a>>i)&)==) x^=<<i;
else if ((b>>i)& || ((a>>i)&)==) a^=(<<i),b^=(<<i);
}
}
}
int tmp=,ans=;
for (int i=;~i;i--)
{
if ((b>>i)&) ans|=<<i;
else if (((a>>i)&)==);
else
{
if ((x>>i)&) ans|=<<i;
else if ((tmp|(<<i))<=m) tmp|=<<i,ans|=<<i;
}
}
printf("%d\n",ans);
return ;
}
最新文章
- android键盘弹出头部上移处理
- ECMAScript 6学习笔记(一):展开运算符
- 第11章 Windows线程池(1)_传统的Windows线程池
- bind和unbind事件的应用
- js 简易判断一个数字是否是小数
- leecode Binary Tree Level Order Traversal II java
- 如何解决innnerText的兼容性问题
- POJ 1273 Drainage Ditches(网络流,最大流)
- PMP是什么,PMP最难的是哪些内容?
- Spring Boot使用AOP在控制台打印请求、响应信息
- 原生ajax可变参数post
- docker 系列 - Java程序制作Docker Image推荐方案(转载)
- java jvm和android DVM区别
- 7款让人惊叹的HTML5粒子动画特效(转载)
- 我的Java之旅 第四课 JAVA 语言语法 基础
- Web发展简史
- spring boot动态数据源方案
- SpringBoot使用端口运行
- CSS层叠样式
- thinkphp5.0调用ajax无刷新加载数据