起床困难综合征 bzoj-3668 Noi-2014

题目大意:题目链接。

注释:略。


想法:Noi考这题...联赛T1难度....

我们将每个门上的数二进制拆分。

发现:当前位的操作可能直接确定了当前位的数字。

即:如果当前位上是0,操作是&,那么这一位无论开始的数是多少,都会变成1。同理如果当前位是1,操作是|,那么这位一定会变成1。

然而如果当前操作和位上的数不能直接确定当前的数,那么我们发现当前的数一定是由初始给定的数确定的。

也就是说我们维护一个数,这个数二进制拆分后,每一位可能是0、1、x和x'。如果是0或1就表示当前位已经被完全确定了。

如果是x表示当前位和初始位相等,x'表示相反。

把所有的门都枚举完了之后,我们看最终的数。

从高位往低位枚举,如果是0或1,那自然不必说。

如果是x',就让初始值这位是0即可,答案显然优

如果是x,判断一下当前剩下的值有没有把这位变成1大。如果有,就变,并将当前值减去当前位,反之枚举下一位。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100010
#define M 35
using namespace std;
int s[N][M]; char opt[N][10];
int a[N],mdl[M];
inline void dvd(int x,int idx)
{
while(x)
{
s[idx][++s[idx][0]]=x&1;
x>>=1;
}
}
int main()
{
int n,m; cin >> n >> m ; for(int i=1;i<=n;i++)
{
scanf("%s%d",opt[i]+1,&a[i]);
dvd(a[i],i);
}
for(int i=1;i<=30;i++) mdl[i]=3;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=30;j++)
{
if(opt[i][1]=='A') if(!s[i][j]) mdl[j]=0;
else if(opt[i][1]=='O') if(s[i][j]) mdl[j]=1;
else
{
if(s[i][j])
{
if(mdl[j]==4) mdl[j]=3;
else if(mdl[j]==3) mdl[j]=4;
else if(mdl[j]==1) mdl[j]=0;
else mdl[j]=1;
}
}
}
}
int ans=0;
for(int i=30;i;i--)
{
if(mdl[i]==3)
{
if(m>=(1<<(i-1)))
{
m-=(1<<(i-1));
mdl[i]=1;
}
else mdl[i]=0;
}
else if(mdl[i]==4) mdl[i]=1;
}
for(int i=30;i>=1;i--)
{
ans+=mdl[i]*(1<<(i-1));
}
printf("%d\n",ans);
return 0;
}

小结:说起来挺麻烦但是想起来贼简单,水到渠成。

[bzoj3668][Noi2014]起床困难综合症_暴力的更多相关文章

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

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

  2. bzoj千题计划238:bzoj3668: [Noi2014]起床困难综合症

    http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这..一位一位的来就好了呀 #include<cstdio> #include&l ...

  3. [Bzoj3668][Noi2014]起床困难综合症(位运算)

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

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

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

  5. [bzoj3668][Noi2014]起床困难综合症/[洛谷3613]睡觉困难综合症

    来自FallDream的博客,未经允许,请勿转载,谢谢. 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综 ...

  6. 【BZOJ】3668: [Noi2014]起床困难综合症(暴力)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这题很简单.............. 枚举每一位然后累计即可.. QAQ,第一次以为能1A, ...

  7. BZOJ3668: [Noi2014]起床困难综合症(贪心 二进制)

    Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2708  Solved: 1576[Submit][Status][Discuss] Descript ...

  8. BZOJ3668 [Noi2014]起床困难综合症 【贪心】

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

  9. [bzoj3668][Noi2014][起床困难综合症] (按位贪心)

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

随机推荐

  1. 二分搜索 POJ 3273 Monthly Expense

    题目传送门 /* 题意:分成m个集合,使最大的集合值(求和)最小 二分搜索:二分集合大小,判断能否有m个集合. */ #include <cstdio> #include <algo ...

  2. document.write()、onclick="alert(xxx)、innerHTML、image.src.match("xxx")、id2.style.color="blue";、isNaN(id2)、document.write("糟糕!文档消失了。")、alert(id2.outerHTML)、id2.className="id06";、onclick="return registe"

    <html> <head> <meta charset="utf-8"> <title>javascript</title&g ...

  3. [转]微信开发.Net 接入示例

    本文转自:http://my.oschina.net/lcak/blog/219618 微信公众平台接口开发官方仅提供了 PHP 接入示例代码, 网上找到的.Net代码多半需要积分下载, 所以自己写了 ...

  4. NodeJs学习记录(五)初学阶段关于ejs和路由

    1.因为只是用了一点皮毛,所以使用起来感觉基本和jsp无异, 逻辑代码块使用  <%  if() {} else  %> , 输出参数值使用 <%=title  %>, 有一个 ...

  5. reduce的特殊用法

    //计算数组中每个元素出现的次数var arr = ["apple","orange","apple","orange" ...

  6. Spark学习之RDD编程(2)

    Spark学习之RDD编程(2) 1. Spark中的RDD是一个不可变的分布式对象集合. 2. 在Spark中数据的操作不外乎创建RDD.转化已有的RDD以及调用RDD操作进行求值. 3. 创建RD ...

  7. git reset作用

    git reset: 1. 文件从暂存区回退到工作区,撤销add 2. 版本回退  一:文件从暂存区回退到工作区,撤销add 如果想取消某个add的文件,可以使用该命令来进行撤销操作 撤消add:gi ...

  8. 微信小程序组件解读和分析:四、icon图标

      icon图标组件说明: icon是一种图标格式,用于系统图标.软件图标等,这种图标扩展名为.icon..ico.常见的软件或windows桌面上的那些图标一般都是ICON格式的.在应用上面很多地方 ...

  9. 【Python-2.7】list类型

    list是Python中的一种数据类型,也就是"列表".在Python中我们可以对list类型进行插入,删除,修改等操作. ##新建list类型 >>> ball ...

  10. Git——基本操作

    Shell 基本概念 shell俗称壳,为使用者提供使用界面,例如DOS下command以及后来的cmd.exe shell分类 图形界面shell,提供友好的可视化界面,例如windows操作界面, ...