[bzoj3668][Noi2014]起床困难综合症_暴力
起床困难综合征 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]起床困难综合症_暴力的更多相关文章
- bzoj3668: [Noi2014]起床困难综合症
从高位到低位枚举期望的应该是ans最高位尽量取一.如果该数最高位为o的话能够取得1直接更新ans否则判断该位取1是否会爆m不会的话就加上. #include<cstdio> #includ ...
- bzoj千题计划238:bzoj3668: [Noi2014]起床困难综合症
http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这..一位一位的来就好了呀 #include<cstdio> #include&l ...
- [Bzoj3668][Noi2014]起床困难综合症(位运算)
3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2612 Solved: 1500[Submit][St ...
- [BZOJ3668] [Noi2014] 起床困难综合症 (贪心)
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
- [bzoj3668][Noi2014]起床困难综合症/[洛谷3613]睡觉困难综合症
来自FallDream的博客,未经允许,请勿转载,谢谢. 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综 ...
- 【BZOJ】3668: [Noi2014]起床困难综合症(暴力)
http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这题很简单.............. 枚举每一位然后累计即可.. QAQ,第一次以为能1A, ...
- BZOJ3668: [Noi2014]起床困难综合症(贪心 二进制)
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2708 Solved: 1576[Submit][Status][Discuss] Descript ...
- BZOJ3668 [Noi2014]起床困难综合症 【贪心】
题目 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因 ...
- [bzoj3668][Noi2014][起床困难综合症] (按位贪心)
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
随机推荐
- ACM_蛇形矩阵
蛇行矩阵 Time Limit: 4000/2000ms (Java/Others) Problem Description: 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. Input: ...
- Previous operation has not finished; run 'cleanup' if it was interrupted.SVN报错
原因: 错误的原因是SVN管理的文件夹改名.删除文件太过频繁,导致有操作挂起了. 解决方式: 1.百度sqlite3.exe并下载. 2.将该文件解压到项目根目录下的.svn文件夹中. 3.打开cmd ...
- 学习笔记 第五章 使用CSS美化网页文本
第五章 使用CSS美化网页文本 学习重点 定义字体类型.大小.颜色等字体样式: 设计文本样式,如对齐.行高.间距等: 能够灵活设计美观.实用的网页正文版式. 5.1 字体样式 5.1.1 定义字体 ...
- Javascript的一些技巧(《Javascript DOM编程艺术》、Javascript语言精粹)
1.什么时候用布尔变量当变量 假设你需要一个这样的变量:我在睡觉——存为一个值:我没在睡觉——存为另一个值. 一般的做法: var stateOne="睡觉",stateTwo=& ...
- 基于spring 3.0mvc 框架的文件上传实现
Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框 ...
- 删除链表中重复的结点_java
package algorithms; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { th ...
- Vue-prop
HTML 中的特性名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符.这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab- ...
- 05Oracle Database 表空间查看,创建,修改及删除
Oracle Database 表空间查看,创建,修改及删除 查看用户表空间 查看数据库管理员表空间表结构 desc dba_tablespaces; 查询表空间名称从管理员表空间表中 select ...
- svn无法显示日期和作者
当遇到这种情况,只要把这个read改为none就可以显示了 亲测绝对管用
- scala学习(1)----map和flatMap的区别
转载:https://www.cnblogs.com/wbh1000/p/9846401.html 两者的区别主要在于action后得到的值 例子: import org.apache.spark.{ ...