还挺简单的。

发现这几个二进制运算并不会进位,所以我们从高到低按位贪心,一位一位计算贡献。

发现$2^{30}$刚好大于$1e9$,所以最多只要算29位。

首先算出一个全都是$0$的二进制数和一个全都是$1$的二进制数通过所有的门之后每一位的情况,可以压成两个变量做。

最后贪心的时候先看看这一位取$0$能不能取到$1$,再看看这一位取$1$能不能取到$1$,如果可以就算上消耗$m$的代价取这个$1$。

因为高位取$1$一定比低位取$1$优,所以算出来的一定是最好答案。

一个每一位全都是$1$的二进制数可以通过机器补码的特性写成$-1$。

时间复杂度$O(nlogMaxInt)$。

Code:

#include <cstdio>
#include <cstring>
using namespace std; int n, m, v1, v0; int main() {
// freopen("testdata.in", "r", stdin); scanf("%d%d", &n, &m);
v0 = , v1 = -; for(int i = ; i <= n; i++) {
char op[]; scanf("%s", op);
int now; scanf("%d", &now);
if(op[] == 'A') v1 &= now, v0 &= now;
if(op[] == 'O') v1 |= now, v0 |= now;
if(op[] == 'X') v1 ^= now, v0 ^= now;
} int ans = ;
for(int i = ; i >= ; i--) {
if((v0 >> i) & ) ans += ( << i);
else if(((v1 >> i) & ) && ( << i) <= m) m -= ( << i), ans += ( << i);
} printf("%d\n", ans);
return ;
}

Luogu 2114 [NOI2014]起床困难综合症的更多相关文章

  1. luogu 2114 [NOI2014]起床困难综合症 位运算+贪心

    感觉这个思路非常巧妙啊~ code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s&qu ...

  2. luogu P2114 [NOI2014]起床困难综合症 位运算 二进制

    建议去uoj那里去测,数据比较强 位运算的题目,就得一位一位的分开考虑 然后枚举初始值的最高位是0 是1 的最终攻击 (二进制内)最高位是1肯定比次位是1次次位是1次次次位是1···的大吧,显然 然后 ...

  3. Luogu P2114[NOI2014]起床困难综合症 【贪心/位运算】By cellur925

    题目传送门 所以NOI的题现在简单惹? 30分做法:枚举开始的权值,n²过掉. 100分做法:竟然是贪心qwq.因为我们的计算背景是二进制下,所以我们贪心地想让每一位都是1.我们现在需要解决的问题,就 ...

  4. Luogu P2114_[NOI2014]起床困难综合症 贪心

    思路:按位贪心. 提交:1次 题解: 可以先处理出对于全$0$串和全$1$串最后每一位的结果.(每一位 从 $0$ $or$ $1$ 变成 $0$ $or$ $1$) 对于每一位,若不能变成$1$,则 ...

  5. [P2114] [NOI2014]起床困难综合症 (位运算)

    题面 传送门:https://www.luogu.org/problemnew/show/P2114 Solution 一道很有意思的位运算题. 要做这一题,我们首先得了解一个很重要的特点 位运算过程 ...

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

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

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

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

  8. NOI2014 起床困难综合症

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

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

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

随机推荐

  1. mysql Replication机制

      从上图可以看见MySQL 复制的基本过程如下: Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容: Master 接收到来自 Sl ...

  2. MySql数据库中存放用户密码需要注意什么?

    前几天被电话面试了,问了一些比较实际的问题,其中一个问题关于PHP开发中MySql里存放用户密码需要注意什么,由于没有过大项目经验,一时语塞,回来网上找了找记下来,希望能对其他人有帮助,我也继续学习. ...

  3. BZOJ - 4196 软件包管理器 (树链剖分+dfs序+线段树)

    题目链接 设白色结点为未安装的软件,黑色结点为已安装的软件,则: 安装软件i:输出结点i到根的路径上的白色结点的数量,并把结点i到根的路径染成黑色.复杂度$O(nlog^2n)$ 卸载软件i:输出结点 ...

  4. CodeSmith 基本语法(二)

    CodeSmith之四 - 典型实例(四) CodeSmith API文档 (三) CodeSmith 基本语法(二) CodeSmith 图形界面基本操作(一) CodeSmith的C#语法与Asp ...

  5. 异常[PersistenceUnit: default] Unable to build Hibernate SessionFactory

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManage ...

  6. java文本文件读写

    java的IO系统中读写文件使用的是Reader和Writer两个抽象类,Reader中的read()和close()方法是抽象方法,Writer中的write().flush()和close()方法 ...

  7. laravel 接收json串

    在做项目的时候发现 用平时的$request->all() 无法获取到请求值 然后这样解决了 但是还是不知道原因 学习源头: http://www.cnblogs.com/anjuncc/p/5 ...

  8. linux configure使用方法

    'configure'脚本有大量的命令行选项.对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是 不会改变的.带上'--help'选项执行'configure'脚本可以看到可用的所有选项. ...

  9. Annotation之四:注解中的-Xlint:unchecked和 -Xlint:deprecation

    一.-Xlint:unchecked用法 对如下Test.java编译时 package com.dxz.annotation; import java.util.ArrayList; import ...

  10. UE4模型导入基础教程

    转自:http://www.unrealchina.net/portal.php?mod=view&aid=290