【Luogu】2114起床困难综合征(位运算贪心)
2024-09-07 10:17:49
这题真是恶心死我了。
由于位运算每一位互不干涉,所以贪心由大到小选择每一位最优的解,但是要判断一下边界,如果选择该解使得原数>m则不能选择。
代码如下
#include<cstdio>
#include<cstring>
#include<cctype>
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} struct defend{
char c[];
long long opt;
}que[];
long long cnt;
long long ans; int main(){
long long n=read(),m=read();
for(int i=;i<=n;++i) scanf("%s%lld",que[i].c+,&que[i].opt);
for(long long i=;i>=;--i){
if(ans+((long long)<<i)>m) continue;
long long s=ans,x=ans+(<<i);
for(int j=;j<=n;++j){
char ch=que[j].c[];
long long opt=que[j].opt;
if(ch=='A'){
s&=opt;
x&=opt;
}
else if(ch=='O'){
s|=opt;
x|=opt;
}
else if(ch=='X'){
s^=opt;
x^=opt;
}
}
s=s&(<<i);
x=x&(<<i);
if(s<x) ans+=<<i;
}
for(int j=;j<=n;++j){
char ch=que[j].c[];
long long opt=que[j].opt;
if(ch=='A'){
ans&=opt;
}
else if(ch=='O'){
ans|=opt;
}
else if(ch=='X'){
ans^=opt;
}
}
printf("%lld",ans);
return ;
}
最新文章
- CSS 多类选择器
- Spring Integration
- node-webkit教程(9)native api 之Tray(托盘)
- 【EF 3】浅谈ADO数据模型生成串(一):csdl,ssdl,msl分析
- 使用Maven将Hadoop2.2.0源码编译成Eclipse项目
- JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
- linux-mkdir
- BOM的使用
- go标准库的学习-path/filepath
- java远程调试(idea)
- python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)
- ssh 管理 linux登录远程服务器
- ionic this.navCtrl.push()和this.navCtrl.pop()
- docker 第一次学习(一)--安装以及相关命令
- android手机内的通讯录数据库
- python 生成元组
- OC - 缓存 - NSCache - 介绍
- hive 中与mysql 中函数同名不同意的方法记录
- 基于Python的接口自动化
- C的强制转换和C++的强制转换(转)