HDU 5323 Solve this interesting problem(DFS)
2015-10-15 22:23
405 查看
题意:求最小的线段树的右端点(根节点表示区间[0,n]),使得给定的区间[L,R]是线段树的某个节点。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define LL long long const LL inf=0x3f3f3f3f3f3f3f3f; LL ans; void dfs(LL l,LL r) { if(l==0) { ans=min(ans,r); return; } if(r>=ans||l<0) { return; } if(r-l+1>l) { return; } dfs(2*l-r-2,r); dfs(2*l-r-1,r); dfs(l,2*r-l); dfs(l,2*r-l+1); } int main() { LL l,r; while(scanf("%lld%lld",&l,&r)!=EOF) { ans=inf; dfs(l,r); if(ans==inf) { printf("-1\n"); } else { printf("%lld\n",ans); } } return 0; }
相关文章推荐
- Maven(1)-安装和配置
- Swift基础知识_01
- 【转】linux系统备份
- You are running VMware Workstation through an incompatible hypervisor
- 使用block闭包是实现两个页面间的反向传值
- 一个大而全的Java通用开发框架
- gen-cpp/.deps/ChildService.Plo: No such file or directory
- poj 2763(树链剖分)
- phpize增加php模块
- 多数投票算法
- 【cl】java变量
- LeetCode 2:Add Two Numbers
- 堆和栈的区别(个人感觉挺不错的)
- 杂想
- Swift利用inout交换两个数的位置
- Oracle归档目录 和 DB_RECOVERY_FILE_DEST
- {Effective Java} Chap 10 Concurrency
- VBscript常用函数
- puppet file资源详解
- puppet package资源详解