Guess Your Way Out! II

Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Description

Amr bought a new video game "Guess Your Way Out! II". The goal of the game is to find an exit from the maze that looks like a perfect binary tree of height h. The player is initially standing at the root of the tree and the exit from the tree is located at some leaf node.

Let's index all the nodes of the tree such that

  • The root is number 1
  • Each internal node i (i ≤ 2h - 1 - 1) will have a left child with index = 2i and a right child with index = 2i + 1

The level of a node is defined as 1 for a root, or 1 + level of parent of the node otherwise. The vertices of the level h are called leaves. The exit to the maze is located at some leaf node n, the player doesn't know where the exit is so he has to guess his way out!

In the new version of the game the player is allowed to ask questions on the format "Does the ancestor(exit, i) node number belong to the range [L, R]?". Here ancestor(v, i) is the ancestor of a node v that located in the level i. The game will answer with "Yes" or "No" only. The game is designed such that it doesn't always answer correctly, and sometimes it cheats to confuse the player!.

Amr asked a lot of questions and got confused by all these answers, so he asked you to help him. Given the questions and its answers, can you identify whether the game is telling contradictory information or not? If the information is not contradictory and the exit node can be determined uniquely, output its number. If the information is not contradictory, but the exit node isn't defined uniquely, output that the number of questions is not sufficient. Otherwise output that the information is contradictory.

Input

The first line contains two integers h, q (1 ≤ h ≤ 50, 0 ≤ q ≤ 105), the height of the tree and the number of questions respectively.

The next q lines will contain four integers each i, L, R, ans (1 ≤ i ≤ h, 2i - 1 ≤ L ≤ R ≤ 2i - 1, ), representing a question as described in the statement with its answer (ans = 1 if the answer is "Yes" and ans = 0 if the answer is "No").

Output

If the information provided by the game is contradictory output "Game cheated!" without the quotes.

Else if you can uniquely identify the exit to the maze output its index.

Otherwise output "Data not sufficient!" without the quotes.

Sample Input

Input
3 1
3 4 6 0
Output
7
Input
4 3
4 10 14 1
3 6 6 0
2 3 3 1
Output
14
Input
4 2
3 4 6 1
4 12 15 1
Output
Data not sufficient!
Input
4 2
3 4 5 1
2 3 3 1
Output
Game cheated!

Hint

Node u is an ancestor of node v if and only if

  • u is the same node as v,
  • u is the parent of node v,
  • or u is an ancestor of the parent of node v.

In the first sample test there are 4 leaf nodes 4, 5, 6, 7. The first question says that the node isn't in the range [4, 6] so the exit is node number 7.

In the second sample test there are 8 leaf nodes. After the first question the exit is in the range [10, 14]. After the second and the third questions only node number 14 is correct. Check the picture below to fully understand.

#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int n,m;
long long xsta,xend;
struct Node
{
long long l,r;
Node(){}
Node(long long p,long long q):l(p),r(q){}
} a;
bool cmp(Node const &a,Node const &b)
{
if(a.l==b.l) return a.r<b.r;
return a.l<b.l;
}
vector <Node> g;
void cc()
{
long long l,r;
int tp,ok;
for(int i=; i<m; i++)
{
scanf("%d %I64d %I64d %d",&tp,&l,&r,&ok);
l=(long long) (l<<(n-tp));
for(int i=; i<n-tp; i++) r=r<<|;
if(ok)
{
xsta=max(xsta,l);
xend=min(xend,r);
}
else
{
g.push_back(Node(l,r));
}
}
g.push_back(Node(xend+,xend+));
}
void solve()
{
sort(g.begin(),g.end(),cmp);
long long ans=-;
for(int i=; i<g.size(); i++)
{
if(xsta>xend) break;
if(xsta<g[i].l)
{
if(ans!=-||xsta+<g[i].l)
{
printf("Data not sufficient!\n");
return ;
}
ans=xsta;
}
xsta=max(xsta,g[i].r+);
}
if(ans!=-)
printf("%I64d\n",ans);
else
printf("Game cheated!\n");
}
void ini()
{
g.clear();
xsta=(long long )<<(n-);
xend=((long long )<<n)-;
}
int main()
{ while(~ scanf("%d%d",&n,&m))
{
ini();
cc();
solve();
}
return ;
}

看了题解想明白的,虽然自己写了一遍,但是一直在wa,所以最后将代码改到和题解一样的了。

http://blog.csdn.net/u012596172/article/details/46897597

终于是发现哪里出错了

xsta=(long long )1<<(n-1);

xend=(long long) (1<<n)-1;

这样写是把1先移位后再转成long long 型的,肯定有精度损失。

所以先((long long)1),把1转成long long 型的在进行移位操作。

CodeForces 558D的更多相关文章

  1. 区间合并 --- Codeforces 558D : Gess Your Way Out ! II

    D. Guess Your Way Out! II Problem's Link: http://codeforces.com/problemset/problem/558/D Mean: 一棵满二叉 ...

  2. codeforces 558D Guess Your Way Out! II 规律

    题目链接 题意: 给出n和q 表示有一棵深度为n的全然二叉树.叶子节点中有恰好一个点是出口 主角从根往下走.但不知道出口在哪里,但主角会获得q个提示.  像这样标号 q个提示 格式: deep [l, ...

  3. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  4. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  5. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  6. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  7. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  8. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  9. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

随机推荐

  1. liunx修改字体为宋体

    有找到修改Linux默认字体的方法sudo vi /etc/fonts/conf.d/69-language-selector-zh-cn.conf修改下sans-serif相关设定    <m ...

  2. Orchard运用 - 定制呈现最新博客文章

    每个博客系统为了吸引更多访问量,一般都会在首页或侧边栏列举一些最新文章/随笔以获取更多点击.其实也就是查询出最新的几篇文章并按照简练的方式呈现,比如一般都只有标题及其对应的链接,有时也会标注一下作者和 ...

  3. Kotlin【简介】Android开发 配置 扩展

    重要资源 官方资源:官网 . 官网源码 .官网文档 . 在线 IDE .GitHub 中文资源:中文官网 .中文文档  离线文档:PDF 文件 . PDF 文件 GitBook 版 .ePUB 文件  ...

  4. 使用OctreeQuantizer提高gdi+绘图质量

    .net中gdi+绘制的图形质量很少,原因是gdi+使用的是256色的. 为了提高绘制图片的质量,可以使用是“Octree“ 算法.“Octree“ 算法允许我们插入自己的算法来量子化我们的图像. 一 ...

  5. JDK 1.7版本的 新特性

    摘自: http://yanguz123.iteye.com/blog/1934766 Jdk1.7的新特性: 1,switch中可以使用字串 Java代码: String s = "tes ...

  6. 【转】四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps

    最近在找降维的解决方案中,发现了下面的思路,后面可以按照这思路进行尝试下: 链接:http://www.36dsj.com/archives/26723 引言 机器学习领域中所谓的降维就是指采用某种映 ...

  7. Scheme 4 Javaer-3.高阶函数

    1.3  Formulating Abstractions with Higher-Order Procedures 教材有时候依照学生的基础.从0讲起:有时候给出一个大图,然后具体地逐一介绍. 本文 ...

  8. C 语言-HelloWorld

    C 语言-HelloWorld C 语言是一种通用的.面向过程式的计算机程序设计语言.1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言. C 语言是一 ...

  9. Python 更新set

    更新set 由于set存储的是一组不重复的无序元素,因此,更新set主要做两件事: 一是把新的元素添加到set中,二是把已有元素从set中删除. 添加元素时,用set的add()方法: weekday ...

  10. jQuery中.html(“xxx”)和.append("xxx")的区别和不同

    append是追加,html是完全替换比如<p id="1"><p>123</p></p>$("#1").htm ...