题目链接: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+按位贪心】的更多相关文章

  1. HDOJ(HDU).2660 Accepted Necklace (DFS)

    HDOJ(HDU).2660 Accepted Necklace (DFS) 点我挑战题目 题意分析 给出一些石头,这些石头都有自身的价值和重量.现在要求从这些石头中选K个石头,求出重量不超过W的这些 ...

  2. HDOJ(HDU).1045 Fire Net (DFS)

    HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...

  3. HDOJ(HDU).1241 Oil Deposits(DFS)

    HDOJ(HDU).1241 Oil Deposits(DFS) [从零开始DFS(5)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...

  4. HDOJ(HDU).1035 Robot Motion (DFS)

    HDOJ(HDU).1035 Robot Motion [从零开始DFS(4)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DF ...

  5. 【BZOJ-4245】OR-XOR 按位贪心

    4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 486  Solved: 266[Submit][Sta ...

  6. [APIO2015]巴厘岛的雕塑[按位贪心+dp]

    题意 给你长度为 \(n\) 的序列,要求分成 \(k\) 段连续非空的区间,求所有区间和的 \(or\) 最小值. 分析 定义 \(f_{i,j}\) 表示前 \(i\) 个点分成 \(j\) 段的 ...

  7. 【BZOJ4069】[Apio2015]巴厘岛的雕塑 按位贪心+DP

    [BZOJ4069][Apio2015]巴厘岛的雕塑 Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 ...

  8. 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 ...

  9. bzoj 4245: [ONTAK2015]OR-XOR【按位贪心】

    知道按位贪心但是不知道怎么贪-- 求一个a的异或前缀和s,然后按位从大到小贪心,ans的当前位能为0的条件是s中有>=m个位置这一位为0且没有flag,并且s[n]的这一位为0 如果符合要求,那 ...

随机推荐

  1. COCOS2D-X 精灵创建随笔

    CCSprite类中创建Sprite的方法都是静态的: static CCSprite* create ( )  创建一个无图片显示的精灵,可随后用 setTexture 方法设置显示图片 stati ...

  2. Keepalived+Nginx+Tomcat配置高可用负载均衡系统示例

    前言 此示例为keepalived+nginx+tomcat的基础配置示例,某些特定配置此例中不会出现,在示例中会用到三个虚拟机:两个纯命令行用于模拟服务端配置,一个带桌面环境的用于模拟客户端访问,这 ...

  3. HDU2017JAVA

    字符串统计 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. C++中各种数据量类型转换

    要在Unicode字符集环境下把CString转化为char* 方法: CString str = _T("D://校内项目//QQ.bmp");//////leo这个NB  可以 ...

  5. IDEA下安装/配置Jrebel

    IDEA下安装/配置Jrebel6.X 1. 为什么要使用Jrebel 在日常开发过程中, 一旦修改配置/在类中增加静态变量/增加方法/修改方法名等情况, tomcat不会自动加载, 需要重启tomc ...

  6. Tomcat 的 SSL 配置

    本教程使用 JDK 6 和 Tomcat 7,其他版本类似. 基本步骤: 使用 java 创建一个 keystore 文件 配置 Tomcat 以使用该 keystore 文件 测试 配置应用以便使用 ...

  7. 第三天关于网页sip的学习。平台win7 64位 freeSwitch jssip架构web网络电话

    上次我们出现了一种问题就是,当我们采用iis架构出jssipweb端的时候,我们无法注册freeswitch的电话.. 我们用别的客户端已经成功能够互通电话,可以录音,唯独使用jssip架构的web端 ...

  8. ASP.NET MVC 第七回 UrlHelper

    这节讲 一下ASP.NET MVC中的Helper. 何谓Helper,其实就是在View中为了实现一些灵活功能而写的方法组. 其实ASP.NET MVC的View是Aspx的页面,本身可以声明定义方 ...

  9. web前端:html

    一.理解表单的作用 1.web 应用程序不仅仅是给用户显示数据,还应该给用户提供一个可以输入数据的图形用户界面.表单的主要作用在于在网页上提供一个图形用户界面,已采集和提交用户输入的数据. 2.htm ...

  10. jQuery获取radio选中项的值【转藏】

    <title></title> <script src="js/jquery-1.7.2.min.js"></script> < ...