bzoj3668 [Noi2014]起床困难综合症——贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3668
一开始想着倒序推回去看看这一位能不能达到来着,因为这样好中途退出(以为不这样会T);
没想到正着的0和1可能出现一样的结果...
这是WA代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=1e5+;
int n,m,t[maxn],ans,cnt[],op[maxn],c;
char ch[];
int cal(int x)
{
memset(cnt,,sizeof cnt);
int ret=;
while(x)cnt[++ret]=x%,x/=;
return ret;
}
int main()
{
scanf("%d%d",&n,&m);
int mx=;
for(int i=;i<=n;i++)
{
scanf("%s%d",&ch,&t[i]);
if(ch[]=='A')op[i]=;//&
if(ch[]=='O')op[i]=;//|
if(ch[]=='X')op[i]=;//^
mx=max(mx,t[i]);
}
int k=cal(mx);
for(int i=k;i;i--)
{
// if(ans+(1<<(i-1))>m)continue;
bool flag=;int nw=;
for(int j=n;j;j--)
{
cal(t[j]);
if(op[j]==&&nw==&&cnt[i]==){flag=;break;}
if(op[j]==&&nw==&&cnt[i]==){flag=;break;}
if(op[j]==)nw^=cnt[i];
}
if(!flag)
{
if(nw==)ans+=(<<(i-));
else if(c+(<<(i-))<=m)c+=(<<(i-)),ans+=(<<(i-));
}
}
printf("%d",ans);
return ;
}
囧
而且 i 不是从 mx 的最高位开始而是从 m 的最高位开始的...
也不用中途退出什么的,因为位数没有那么大;
可以先用0得到一个 ans 作为底线,然后看看能不能通过某些位上放1让答案更大。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=1e5+;
int n,m,t[maxn],ans,cnt[],op[maxn],c;
char ch[];
int cal(int x)
{
memset(cnt,,sizeof cnt);
int ret=;
while(x)cnt[++ret]=x%,x/=;
return ret;
}
int main()
{
scanf("%d%d",&n,&m);
int mx=;
for(int i=;i<=n;i++)
{
scanf("%s%d",&ch,&t[i]);
if(ch[]=='A')op[i]=,ans&=t[i];//&
if(ch[]=='O')op[i]=,ans|=t[i];//|
if(ch[]=='X')op[i]=,ans^=t[i];//^
}//得到输入0后的ans
int k=cal(m);k--;
for(int i=k;i>=;i--)
{
int tmp=(<<i);
if(tmp>m||(ans&(<<i)))continue;
for(int j=;j<=n;j++)
{
if(op[j]==)tmp&=t[j];
if(op[j]==)tmp|=t[j];
if(op[j]==)tmp^=t[j];
}
if(tmp&(<<i))ans|=(<<i),m-=(<<i);
}
printf("%d",ans);
return ;
}
bzoj3668 [Noi2014]起床困难综合症——贪心的更多相关文章
- BZOJ3668: [Noi2014]起床困难综合症(贪心 二进制)
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2708 Solved: 1576[Submit][Status][Discuss] Descript ...
- [BZOJ3668] [Noi2014] 起床困难综合症 (贪心)
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
- BZOJ 3668: [Noi2014]起床困难综合症( 贪心 )
之前以为xor,or,and满足结合律...然后连样例都过不了 早上上体育课的时候突然想出来了...直接处理每一位是1,0的最后结果, 然后从高位到低位贪心就可以了... 滚去吃饭了.. ------ ...
- [Bzoj3668][Noi2014]起床困难综合症(位运算)
3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2612 Solved: 1500[Submit][St ...
- 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]起床困难综合症 贪心
原文地址:http://www.cnblogs.com/GXZlegend/p/6797090.html 题目描述 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神 ...
- BZOJ3668 [Noi2014]起床困难综合症 【贪心】
题目 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找到了该病的发病原因 ...
- [bzoj3668][Noi2014][起床困难综合症] (按位贪心)
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
随机推荐
- codeforces #299 div 2
(总算是5题都做完了- -) 暂时做了4题,先放一下有时间做最后一题(当然如果我真的能做出的话...)(看了大神的代码总算是理解了E题,做完发现也没那么难,果然想出一个思路的过程对于我这种弱渣来说还是 ...
- 【bzoj1042】[HAOI2008]硬币购物-递推与动规-容斥原理
硬币购物 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. Input 第一行 c1,c2 ...
- [转]genymotion Unable to load VirtualBox engine 某种解决办法
genymotion Unable to load VirtualBox engine 某种解决办法 耳闻genymotion这款模拟器很强力.于是下下来试试看.我的机器上是有virtualbox的了 ...
- Assigning to "id<CALayerDelegate> _Nullable" from incompatible type "ZXCapture *const __strong" 的警告提示信息
该警告提示信息,是说,设置了代理对象,但是并没有继承它的代理.下图中,可以看出,警告信息提示我们没有继承“CALayerDelegate”的代理. 解决方法,很简单,(在 @interface 文件中 ...
- django学习之- Form
参考:http://www.cnblogs.com/wupeiqi/articles/6144178.htmlFORM中的字段只对post上来的数据进行form验证,主要涉及:字段 和 插件字段:对用 ...
- Treasure Hunt--poj1066(最短路加判断线段的关系)
http://poj.org/problem?id=1066 题目大意:有n条线段 他们都在这个房间里 最后有一个点代表起始位置 现在想通过墙出去 他只能爆破每个房间的中点的门 问最少的门通 ...
- [Bzoj1022][SHOI2008]小约翰的游戏John(博弈论)
1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2976 Solved: 1894[Submit] ...
- JDBC调用存储过程,进参出参
今天做了一个数据表拷贝的功能,用到了存储过程,就写了一个java中用jdbc调用存储过程的代码,成功的实现了功能,晚上跑回家记录下 Connection conn = ConnectionUtil.g ...
- 洛谷 P1731 [NOI1999]生日蛋糕
P1731 [NOI1999]生日蛋糕 题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M ...
- Linux源代码分析工具-Source Insight
下载地址:http://www.sourceinsight.com/down35.html 可用注冊码:SI3US-205035-36448 使用说明:http://wenku.baidu.com/v ...