[HDOJ - 5208] Where is Bob 【DFS+按位贪心】
题目链接:HDOJ - 5208
题目分析
使用按位贪心的思想,即从高位向低位枚举,尽量使这一位的答案为 1 。
我们使用 DFS ,每次就是对于 [l1, r1] [l2, r2] x 进行处理,其中,x 是当前处理的最高位的权值,即 2^i 。
如果 A 和 B 两人的区间的最高位都确定了,那就记录这一位的答案,直接处理下一位。
如果 A 可以取 0/1 ,而 B 已经确定了,那么 A 就一定要取与 B 相反的那个。
如果 A 和 B 都能取 0/1 ,那么我们就要分支进行 DFS ,一种是 A-1 B-1 ,另一种是 A-0 B-0 ,然后取这两种情况答案的较大值。
然而剪枝是十分有效的,必须加上“如果 B 的区间完全包含了 A 的区间,直接返回 0”。不加这句就会 TLE 。(这样能将大部分分支剪掉?)
另外,如果当前的区间是 [l, r] l < x && r >= x
那么最高位就可以选 0 也可以选 1。
如果决策选 0 ,那么到下一位的区间就变为 [l, x - 1] 。
如果决策选 1 ,那么到下一位的区间就变为 [x, r - x]。
代码
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm> using namespace std; inline int gmax(int a, int b) {return a > b ? a : b;} int Ans, l, r, ll, rr, T; int Solve(int l, int r, int ll, int rr, int x)
{
if (x == 0 || (ll <= l && rr >= r)) return 0;
int v, vv;
if (r < x) v = 0;
else if (l >= x) v = 1;
else v = 2;
if (rr < x) vv = 0;
else if (ll >= x) vv = 1;
else vv = 2;
if (v == 0)
{
if (vv == 0) // A-0 B-0
return Solve(l, r, ll, rr, x >> 1);
else if (vv == 1) // A-0 B-1
return x + Solve(l, r, ll - x, rr - x, x >> 1);
else // A-0 B-0-1
return Solve(l, r, ll, x - 1, x >> 1);
}
else if (v == 1)
{
if (vv == 0) // A-1 B-0
return x + Solve(l - x, r - x, ll, rr, x >> 1);
else if (vv == 1) // A-1 B-1
return Solve(l - x, r - x, ll - x, rr - x, x >> 1);
else // A-1 B-0-1
return Solve(l - x, r - x, 0, rr - x, x >> 1);
}
else
{
if (vv == 0) // A-0-1 B-0
return x + Solve(0, r - x, ll, rr, x >> 1);
else if (vv == 1) // A-0-1 B-1
return x + Solve(l, x - 1, ll - x, rr - x, x >> 1);
else // A-0-1 B-0-1
return gmax(Solve(l, x - 1, ll, x - 1, x >> 1), Solve(0, r - x, 0, rr - x, x >> 1));
}
} int main()
{
scanf("%d", &T);
for (int Case = 1; Case <= T; ++Case)
{
scanf("%d%d%d%d", &l, &r, &ll, &rr);
Ans = Solve(l, r, ll, rr, 1 << 30);
printf("Case #%d: %d\n", Case, Ans);
}
return 0;
}
[HDOJ - 5208] Where is Bob 【DFS+按位贪心】的更多相关文章
- HDOJ(HDU).2660 Accepted Necklace (DFS)
HDOJ(HDU).2660 Accepted Necklace (DFS) 点我挑战题目 题意分析 给出一些石头,这些石头都有自身的价值和重量.现在要求从这些石头中选K个石头,求出重量不超过W的这些 ...
- HDOJ(HDU).1045 Fire Net (DFS)
HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...
- HDOJ(HDU).1241 Oil Deposits(DFS)
HDOJ(HDU).1241 Oil Deposits(DFS) [从零开始DFS(5)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...
- HDOJ(HDU).1035 Robot Motion (DFS)
HDOJ(HDU).1035 Robot Motion [从零开始DFS(4)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DF ...
- 【BZOJ-4245】OR-XOR 按位贪心
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 486 Solved: 266[Submit][Sta ...
- [APIO2015]巴厘岛的雕塑[按位贪心+dp]
题意 给你长度为 \(n\) 的序列,要求分成 \(k\) 段连续非空的区间,求所有区间和的 \(or\) 最小值. 分析 定义 \(f_{i,j}\) 表示前 \(i\) 个点分成 \(j\) 段的 ...
- 【BZOJ4069】[Apio2015]巴厘岛的雕塑 按位贪心+DP
[BZOJ4069][Apio2015]巴厘岛的雕塑 Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 ...
- Luogu P2326 AKN's PPAP【按位贪心】
题目描述 “I have a pen,I have an apple.Eh,Apple-Pen!. I have a pen,I have pineapple.En,Pineapple-Pen! Ap ...
- bzoj 4245: [ONTAK2015]OR-XOR【按位贪心】
知道按位贪心但是不知道怎么贪-- 求一个a的异或前缀和s,然后按位从大到小贪心,ans的当前位能为0的条件是s中有>=m个位置这一位为0且没有flag,并且s[n]的这一位为0 如果符合要求,那 ...
随机推荐
- mysql触发器的作用及语法
触发器是一种特殊的存储过程,它在插入,删除或改动特定表中的数据时触发运行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有下面的作用: 1.安全性.能够基于数据库的值使用户具有 ...
- hadoop错误Operation category READ is not supported in state standby
报如下错误 解决方法: 方法一:(结果不起作用) 通过Shell命令方式,hadoop/bin/hdfs haadmin -failover --forceactive hadoop2 hadoop1 ...
- 微信45028错误,微信has no masssend quota hint错误
微信45028,微信has no masssend quota hint 微信测试账号群发出现45028,has no masssend quota hint错误 >>>>&g ...
- asp gridview批量删除和全选
本人新手刚学asp.net 全选和删除也是引用了他人的代码试了一试可以实现,感觉很好,就发了上来. 前台代码 <asp:GridView ID="GridView1" r ...
- 标准web架构分层
标准Web系统的架构分层 转载:http://blog.csdn.net/yinwenjie http://blog.csdn.net/yinwenjie/article/details/464 ...
- 在MessageBox的Show方法中如何无限使用参数值?
今天发现在show方法中不能使用花括号的方式使用多个可变参数,经过查询得出结果.在show方法中是不存在花括号的方式使用参数的.在Console.WriteLine中是存在的,如下: 那么在show方 ...
- 如何下载到最新的版本的Oracle Database
其实这不是一个很困难的事情,但是发现好多同学都不知道,其实只需直接访问Oracle的官网就可以找到,鉴于Oracle经常改到下载面也我这里直接粘贴下载地址 http://www.oracle.com/ ...
- Linux VPS使用百度网盘API上传备份文件
最近百度网盘将空间升级到了永久1TB,鉴于百度的实力用做数据备份空间不错,不过百度网盘没有Linux下的客户端,上传管理文件需通过百度开放云平台访问PCS资源的系列接口. 1.首先加入百度开发者:ht ...
- JavaScript中Ajax的get和post请求
AJAX = 异步 JavaScript和XML(Asynchronous JavaScript and XML) 作用:在不重新加载整个网页的情况下,对网页的某部分进行更新. 两种请求方式: 1 ...
- 平衡搜索树(三) B-Tree
B树的简介 B 树是为了磁盘或其它存储设备而设计的一种多叉平衡查找树.与红黑树很相似,但在降低磁盘I/0操作方面要更好一些(树的深度较低).许多数据库系统都一般使用B树或者B树的各种变形结构.B树与红 ...