Guess Your Way Out! II---cf 558D (区间覆盖,c++STL map 的使用)
题目链接:http://codeforces.com/contest/558/problem/D
题意就是有一个二叉树高度为 h ,人站在根节点上,现在要走出去,出口在叶子节点上,有 q 条信息,每条信息包含了在第 x 层的节点 L 到 R 范围内的叶子节点中是否存在出口,ans=1代表包含,ans=0代表不包
含;求出出口的节点,如果不存在输出Game cheated! 如果出口不止一个输出Data not sufficient!
对左右区间起点和终点组成的集合进行排序。然后找到答案存在的区间,如果区间长度=1,答案唯一;长度>1,答案不唯一;长度=0,无解。
我们可以把所有的第x层的L R节点在第h层找到相对应的L R,最后转移到求第h层的区间覆盖数为 q 的节点;
由于数据超int,一定开不了数组,就用map<LL, int>容器(自带排序);在LL进行位运算是要把1转成LL类型,错的我想哭;
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <vector>
#include <map>
using namespace std;
#define N 55
#define INF 0x3f3f3f3f
#define met(a, b) memset(a, b, sizeof(a))
typedef long long LL; int main()
{
LL L[N] = {0, 1}, R[N] = {0};
/// LL L1[N] = {0, 1}; for(int i=2; i<=50; i++)
{
L[i] = L[i-1]*2;
/// L1[i] = (LL)1 << (i-1) ;///long long 的位运算要这样写;
/// printf("%I64d %I64d\n", L[i], L1[i]);
R[i] = L[i]*2-1;
} int h, q, x, ans; LL Right, Left; while(scanf("%d %d", &h, &q) != EOF)
{
if (q == 0)
{
if (h == 1)puts("1");
else puts("Data not sufficient!");
continue ;
} map<LL, int> a;///自带排序功能,按照LL类型的数进行从小到大的顺序排列; for(int i=1; i<=q; i++)
{
scanf("%d %I64d %I64d %d", &x, &Left, &Right, &ans); while(x < h)
{
x ++;
Left = Left * 2;
Right = Right * 2 + 1;
} if(ans)
{
a[Left] ++; a[Right+1] --; }
else
{
a[L[h]] ++; a[Left] --; a[Right+1] ++; a[R[h]+1] --;
}
}
int sum = 0;
LL ans1, cnt = 0, Mid = -1; map<LL, int>:: iterator it; for(it = a.begin() ; it != a.end(); it ++)///map类型内数据的访问;
{
///printf("%I64d %d\n", it->first, it->second); sum += ( it->second );///类似区间覆盖问题; if( Mid != -1 )
{
cnt += ( it->first ) - Mid;///记录区间范围;
ans1 = Mid;
}
if( sum == q ) Mid = ( it->first );///说明每局询问里面都允许it->first是答案; else Mid = -1;
}
if(cnt == 1) printf("%I64d\n", ans1);///当答案所在的区间==1时,mid就是答案; else if(cnt > 1) puts("Data not sufficient!");///范围大于一时说明数据不足; else puts("Game cheated!");///==0时说明有错;
}
return 0;
}
Guess Your Way Out! II---cf 558D (区间覆盖,c++STL map 的使用)的更多相关文章
- HDU 4509 湫湫系列故事——减肥记II(线段树-区间覆盖 或者 暴力技巧)
http://acm.hdu.edu.cn/showproblem.php?pid=4509 题目大意: 中文意义,应该能懂. 解题思路: 因为题目给的时间是一天24小时,而且还有分钟.为了解题方便, ...
- UVa 10020 (最小区间覆盖) Minimal coverage
题意: 数轴上有n个闭区间[ai, bi],选择尽量少的区间覆盖一条指定线段[0, m] 算法: [start, end]为已经覆盖到的区间 这是一道贪心 把各个区间先按照左端点从小到大排序,更新st ...
- codeforces Gym 100187F F - Doomsday 区间覆盖贪心
F. Doomsday Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/F ...
- 【区间覆盖问题】uva 10020 - Minimal coverage
可以说是区间覆盖问题的例题... Note: 区间包含+排序扫描: 要求覆盖区间[s, t]; 1.把各区间按照Left从小到大排序,如果区间1的起点大于s,则无解(因为其他区间的左起点更大):否则选 ...
- uvalive 2326 - Moving Tables(区间覆盖问题)
题目连接:2326 - Moving Tables 题目大意:在一个走廊上有400个教室, 先在有一些桌子要移动, 每次移动需要十分钟, 但是不同房间的桌子可以在同一个十分钟内移动,只要走廊没有被占用 ...
- 高效算法——E - 贪心-- 区间覆盖
E - 贪心-- 区间覆盖 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/E 解题思路: 贪心思想, ...
- 外星人的供给站 (区间覆盖 t贪心)
/** 区间覆盖问题 分析: 每个点可以确定两个圆心 圆心的范围形成 一个区间 在这个区间上以任意一点画圆便可将此点 包含在内 如果有两个点所确定的区间相交了 说明这两个点可以用一个圆包含在内 即用一 ...
- Cleaning Shifts(区间覆盖)
/* http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?pid=1019&ojid=1&cid=10 题目: 给定一个时 ...
- UVA 10382 - Watering Grass【贪心+区间覆盖问题+高精度】
UVa 10382 - Watering Grass n sprinklers are installed in a horizontal strip of grass l meters long a ...
随机推荐
- poj2082单调栈
本来实在做后缀数组的题目的,不巧,碰到了pku3415这题,需要用到单调栈来维护,但是之前又没有学习过单调栈这方面的知识,于是水了几题....... 题意:给你一些连续的小矩形,高宽不定,求最大的矩形 ...
- 算法图绘制工具Graphviz
graphviz是贝尔实验室设计的一个开源的画图工具,它的强大主要体现在“所思即所得"(WYTIWYG,what you think is what you get),这是和office的“ ...
- linux服务器 IE中ico 不能正常显示
问题: mime_type: image/vnd.microsoft.icon 的,但发现在 IE 下面,直接打开 icon 的地址,图标不能正常显示 1.将ico放在windows服务器上,直接访问 ...
- cocosbuilder的一些坑
主要是大小写问题 在扁平发布模式下,如果存在大小写不同的文件,文件会被替换掉.而模拟上运行没问题,在真机上运行 有问题.找了半天才发现,坑啊!
- Can't zip RDDs with unequal numbers of partitions
java.lang.IllegalArgumentException: Can't zip RDDs with unequal numbers of partitions //如果两个RDD分区数不同 ...
- select 5种子句介绍
一.Where 条件查询 ①where expression 用法:expression为真,则该行取出 运用场合 各种条件查询场合,如按学号查学生,按价格查商品,按发布时间查新闻等 ②select ...
- SQL Server 数据库同步,订阅、发布、复制、跨服务器
随便说两句 折腾了一周,也算把数据库同步弄好了.首先局域网内搭建好,进行各种测试,弄的时候各种问题,弄好以后感觉还是挺简单的.本地测试好了,又在服务器进行测试,主要的难点就是跨网段同步,最后也解决了, ...
- js函数与 Promise的使用
JavaScript的函数不但是“头等公民”,而且可以像变量一样使用,具有非常强大的抽象能力. 定义函数的方式如下: function abs(x) { if (x >= 0) { return ...
- 【BZOJ】1635: [Usaco2007 Jan]Tallest Cow 最高的牛(差分序列)
http://www.lydsy.com/JudgeOnline/problem.php?id=1635 差分序列是个好东西啊....很多地方都用了啊,,, 线性的进行区间操作orz 有题可知 h[a ...
- 我学cocos2d-x (一) 游戏基本概念:坐标系与Anchor Point
坐标系: 游戏开发中.全部物体都有自己的位置,而我们须要一个參考系来描写叙述物体的位置.使用cocos2d-x开发的时候.有几个比較重要坐标系须要掌握:屏幕坐标系和Cocos2d坐标系 屏幕坐标系: ...