解:m = 0的部分分,直接模拟。有and 0的部分分,直接模拟。<=1000的部分分,枚举攻击力之后模拟。所有操作相同的部分分,可以合并成只有一个操作。然后枚举m或者逐位贪心。

正解是逐位贪心,内层跑一遍1~n个操作。然后后面这个1~n其实可以优化,在外层用00000...0和11111...1来一次性搞完即可。

 #include <bits/stdc++.h>

 const int N = ;

 int a[N], opt[N], n, m;
char str[]; /// 0 AND & 1 OR | 2 XOR ^ namespace m0 {
inline void solve() {
int ans = ;
for(int i = ; i <= n; i++) {
if(opt[i] == ) {
ans = ans & a[i];
}
else if(opt[i] == ) {
ans = ans | a[i];
}
else if(opt[i] == ) {
ans = ans ^ a[i];
}
}
printf("%d\n", ans);
return;
}
} namespace bf {
inline void solve() {
int ans = ;
for(int i = ; i <= m; i++) {
int x = i;
for(int j = ; j <= n; j++) {
if(opt[j] == ) {
x = x & a[j];
}
else if(opt[j] == ) {
x = x | a[j];
}
else {
x = x ^ a[j];
}
}
ans = std::max(ans, x);
}
printf("%d\n", ans);
return;
}
} namespace same {
inline void solve() {
int x = a[];
for(int i = ; i <= n; i++) {
if(opt[i] == ) {
x = x & a[i];
}
else if(opt[i] == ) {
x = x | a[i];
}
else {
x = x ^ a[i];
}
}
int ans = ;
if(m <= ) {
for(int i = ; i <= m; i++) {
if(opt[] == ) {
ans = std::max(ans, i & x);
}
else if(opt[] == ) {
ans = std::max(ans, i | x);
}
else if(opt[] == ) {
ans = std::max(ans, i ^ x);
}
}
}
else {
int now = ;
for(int i = ; i >= ; i--) {
if(opt[] == ) {
if(((x >> i) & ) && (now | ( << i)) <= m) {
now |= ( << i);
}
}
else if(opt[] == ) {
if(((x >> i) & ) == && (now | ( << i)) <= m) {
now |= ( << i);
}
}
else {
if(((x >> i) & ) == && (now | ( << i)) <= m) {
now |= ( << i);
}
}
}
if(opt[] == ) {
ans = x & now;
}
else if(opt[] == ) {
ans = x | now;
}
else {
ans = x ^ now;
}
}
printf("%d\n", ans);
return;
}
} int main() {
bool flag1 = false, flag2 = true;
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) {
scanf("%s%d", str, &a[i]);
if(str[] == 'O') opt[i] = ;
else if(str[] == 'X') opt[i] = ;
else if(a[i] == ) {
flag1 = true;
}
if(i > && opt[i] != opt[i - ]) {
flag2 = false;
}
} if(!m || flag1) {
m0::solve();
return ;
}
if(n <= && m <= ) {
bf::solve();
return ;
}
if(flag2) {
same::solve();
return ;
} int ans = , now = ;
for(int i = ; i >= ; i--) {
int t1 = , t0 = ;
for(int j = ; j <= n; j++) {
if(opt[j] == ) {
t0 &= (a[j] >> i) & ;
t1 &= (a[j] >> i) & ;
}
else if(opt[j] == ) {
t0 |= (a[j] >> i) & ;
t1 |= (a[j] >> i) & ;
}
else {
t0 ^= (a[j] >> i) & ;
t1 ^= (a[j] >> i) & ;
}
}
if(t0) {
ans |= ( << i);
}
else if(t1 && (now | ( << i)) <= m) {
now |= ( << i);
ans |= ( << i);
}
}
printf("%d\n", ans);
return ;
}

AC代码

LOJ#2244 起床困难综合症的更多相关文章

  1. BZOJ-3668 起床困难综合症 位运算+贪心

    faebdc学长杂题选讲中的题目...还是蛮简单的...位运算写的不熟练... 3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 ...

  2. bzoj3668: [Noi2014]起床困难综合症

    从高位到低位枚举期望的应该是ans最高位尽量取一.如果该数最高位为o的话能够取得1直接更新ans否则判断该位取1是否会爆m不会的话就加上. #include<cstdio> #includ ...

  3. NOI2014 起床困难综合症

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 225  Solved: 153[Submit][Stat ...

  4. BZOJ 3668: [Noi2014]起床困难综合症( 贪心 )

    之前以为xor,or,and满足结合律...然后连样例都过不了 早上上体育课的时候突然想出来了...直接处理每一位是1,0的最后结果, 然后从高位到低位贪心就可以了... 滚去吃饭了.. ------ ...

  5. BZOJ 3668: [Noi2014]起床困难综合症【贪心】

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2326  Solved: 1305[Submit][St ...

  6. 【NOI2014】起床困难综合症(贪心)

    [NOI2014]起床困难综合症(贪心) 题面 Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚 ...

  7. Luogu 睡觉困难综合征 ([NOI2014]起床困难综合症)

    一.[NOI2014]起床困难综合症 题目描述 网址:https://daniu.luogu.org/problemnew/show/2114 大意: 有一条链,链上每一个节点包含一个位运算f 与 一 ...

  8. [BZOJ3668] [Noi2014] 起床困难综合症 (贪心)

    Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...

  9. [NOI 2014]起床困难综合症

    Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...

随机推荐

  1. Java面试 32个核心必考点完全解析

    目录 课程预习 1.1 课程内容分为三个模块 1.2 换工作面临问题 1.3 课程特色 课时1:技术人职业发展路径 1.1 工程师发展路径 1.2 常见技术岗位划分 1.3 面试岗位选择 1.4 常见 ...

  2. PHP+nginx 启动后访问超时

    场景 在Windows上, nginx配置并启动后, 访问报504超时 解决 很尴尬, php-cgi没启动 php-cgi -b

  3. 生鲜配送管理系统_升鲜宝V2.0 小标签打印功能【代配送商品打印小标签功能】说明_15382353715

    小标签打印说明 小标签打印可以打印本系统的订单商品数量,也可以把外部的订单商品导入本系统进行打印. 打印本系统中的订单商品操作说明[上篇文章已经讲解相关的操作说明] 打印本系统之外的订单商品明细清单 ...

  4. 工具资源系列之给虚拟机装个ubantu

    前文我们已经讲解了如何在 mac 系统上安装虚拟机软件,这节我们接着讲解如何利用虚拟机安装 Ubuntu 镜像. 安装镜像的大致步骤基本相同,只不过是配置项略显不同而已,如果需要安装其他系统镜像,请参 ...

  5. 随笔:关于去年的WordPress建站的回忆

    2018-02-26    建站 2018-02-28    选择主题Clearision 2018-03-01    学习插入视频.修改主题 <iframe src="//playe ...

  6. Jmeter接口测试实战-数据传递

    Jmeter接口测试实战-数据传递 接口与接口之间没有关联的测试是缺乏意义和没有灵魂的,只有数据在不同接口之间传递才能勾画出业务场景重要的链路. 我们用较为通用的http/https协议,接口普遍返回 ...

  7. 简单易懂的单元测试框架-gtest(二)

    简介     事件机制用于在案例运行前后添加一些操作(相当于挂钩函数).目前,gtest提供了三种等级的事件,分别: 全局级,所有案例执行的前后 TestSuite级,某一个案例集的前后 TestCa ...

  8. 结对编程总结 -- 赵雄君 & 冯小纯

    结对编程总结 一.        项目综述 通过对比分析两人代码,决定以本人的个人项目代码作为主要参考. 本系统是基于QT Creator 4.5.2开发环境,开发语言C++,能够实现用户注册,发送短 ...

  9. 周一02.3运行python程序的两种方式

    一.运行python程序的两种方式 方法一:交互式:                     优点:输入一行代码立刻返回结果                      缺点:无法永久保存代码 方法二: ...

  10. RocketMQ三主三从二命名服务平滑版本升级实操

    ​本文介绍本次进行RocketMQ平滑过渡升级的实际操作 前文已经介绍过了升级基本原理,主要思想就是先升级NameSrv(命名服务)然后在升级broker节点.broker节点先升级master节点然 ...