【uoj2】 NOI2014—起床困难综合症
http://uoj.ac/problem/2 (题目链接)
题意
给出n个操作包括And,or,xor,求从0~m中的一个数使得经过这些操作后得到的值最大。
Solution
大水题。。贪心由高到低枚举二进制上每一位:这一位为0,经过操作后当前位变为1,那么就把这一位定为0;这一位为1,经过操作后仍然为1,且当前答案加上这一位后不超过m,那么就把这一位定为1;无论是0还是1经过操作后都为0,那么当然是选0,保证答案尽可能小。
细节
数组开小?
代码
// uoj2
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<queue>
#define MOD 1000000007
#define inf 2147483640
#define LL long long
#define free(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout);
using namespace std; const int maxn=100010;
struct data {int t,op;}a[maxn];
int bin[31],n,m,x;
char s[10]; int cal(int x,int val) {
for (int i=1;i<=n;i++) {
if (a[i].op==0) val&=a[i].t;
else if (a[i].op==1) val|=a[i].t;
else val^=a[i].t;
}
if (val&x) return 1;
else return 0;
}
int main() {
bin[0]=1;for (int i=1;i<=30;i++) bin[i]=bin[i-1]<<1;
scanf("%d%d",&n,&m);
char s[10];
for (int i=1;i<=n;i++) {
scanf("%s%d",s,&a[i].t);
if (s[0]=='A') a[i].op=0;
else if (s[0]=='O') a[i].op=1;
else a[i].op=2;
}
int l=30,ans=0;
if (m!=0) {
for (;bin[l]>m;l--);
for (int i=l;i>=0;i--) {
if (cal(bin[i],0)) continue;
else if (cal(bin[i],bin[i]) && ans+bin[i]<=m) ans+=bin[i];
}
}
for (int i=1;i<=n;i++) {
if (a[i].op==0) ans&=a[i].t;
else if (a[i].op==1) ans|=a[i].t;
else ans^=a[i].t;
}
printf("%d",ans);
return 0;
}
【uoj2】 NOI2014—起床困难综合症的更多相关文章
- BZOJ3668/UOJ2 [NOI2014]起床困难综合症
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- bzoj3668: [Noi2014]起床困难综合症
从高位到低位枚举期望的应该是ans最高位尽量取一.如果该数最高位为o的话能够取得1直接更新ans否则判断该位取1是否会爆m不会的话就加上. #include<cstdio> #includ ...
- NOI2014 起床困难综合症
3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 225 Solved: 153[Submit][Stat ...
- BZOJ 3668: [Noi2014]起床困难综合症( 贪心 )
之前以为xor,or,and满足结合律...然后连样例都过不了 早上上体育课的时候突然想出来了...直接处理每一位是1,0的最后结果, 然后从高位到低位贪心就可以了... 滚去吃饭了.. ------ ...
- BZOJ 3668: [Noi2014]起床困难综合症【贪心】
3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1305[Submit][St ...
- Luogu 睡觉困难综合征 ([NOI2014]起床困难综合症)
一.[NOI2014]起床困难综合症 题目描述 网址:https://daniu.luogu.org/problemnew/show/2114 大意: 有一条链,链上每一个节点包含一个位运算f 与 一 ...
- P2114 [NOI2014]起床困难综合症(二进制)
P2114 [NOI2014]起床困难综合症 我们开始设俩数,一个二进制表示全是1,另一个全是0(就是2147483647 和 0 辣) 蓝后跑一遍门 于是最后有4种情况 1->0,1-> ...
- 洛谷P2114 [NOI2014]起床困难综合症
P2114 [NOI2014]起床困难综合症 题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作 ...
- bzoj千题计划238:bzoj3668: [Noi2014]起床困难综合症
http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这..一位一位的来就好了呀 #include<cstdio> #include&l ...
- [NOI2014]起床困难综合症(二进制+贪心)
题目 [NOI2014]起床困难综合症 做法 先用全\(0\)和全\(1\)去运行一下,再在满足\(m\)的限制下,贪心地从高位到低位选择即可
随机推荐
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Vector3D - AS3
Vector3D 类使用笛卡尔坐标 x.y 和 z 表示三维空间中的点或位置.与在二维空间中一样,x 属性表示水平轴,y 属性表示垂直轴.在三维空间中,z 属性表示深度.当对象向右移动时,x 属性的值 ...
- WindowXP与WIN7环境安装、破解、配置AppScan8.0
---------------------------------------------------------------------------------------------------- ...
- sqlzoo.net刷题3
Find the continents where all countries have a population <= 25000000. Then find the names of the ...
- mybatis-config.xml详解
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...
- 【转】【C#】C# 不常用关键字
1.__arglist 让我们先从__arglist开始. __arglist是用来给方法传送参数.通常我们是通过函数头部指定的参数列表给方法传递参数的.如果我们想要给方法传递一组新的参数,我们需要重 ...
- C语言 动态库简单开发
动态库项目 //简单的动态库开发----报文发送 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib. ...
- C语言 文件操作12--文件加密
//文件加密解密 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include ...
- memcached工作原理与优化建议
申明,本文为转载文:http://my.oschina.net/liuxd/blog/63129 工作原理 基本概念:slab,page,chunk. slab,是一个逻辑概念.它是在启动memcac ...
- Xcode7 项目转 Xcode6 时 出现问题
target specifies product type 'com.apple.product-type.bundle.ui-testing', but there's no such produc ...