问题描述

《飞扬的小鸟》是一款风靡的小游戏。在游戏中,小鸟一开始位于(0,0)处,它的目标是飞到横坐标为X的某个位置上。每一秒,你可以选择点击屏幕,那么小鸟会从(x,y)飞到(x+1,y+1),或者不点击,那么小鸟会飞到(x+1,y-1)。

在游戏中还有n个障碍物,用三元组(x[i],a[i],b[i])描述,表示在直线x=x[i]上,y<=a[i]或者y>=b[i]的部分都是障碍物,碰到或者擦边都算游戏失败。请求出小鸟从(0,0)飞到目的地最少需要点击多少次屏幕。

输入格式

第一行包含两个整数n(0<=n<=500000),X(1<=X<=10^9)。

接下来n行,每行三个整数x[i],a[i],b[i] (0<x[i]<X,-109<=a[i]<b[i]<=109)。 数据保证x[i]<x[i+1]。

输出格式

如果无论如何都飞不到目的地,输出NIE,否则输出点击屏幕的最少次数。

解析

假设我们已经确定了在跨过每一个障碍物时的高度,分别记为\(h_1,h_2,h_3,......,h_n\),再记第i与i-1个障碍物之间点的次数为\(x_i\),没点的次数为\(y_i\),那么我们有

\[x_i+y_i=dis_i-dis_{i-1}\\x_i-y_i=h_i-h_{i-1}
\]

通过解方程我们得到

\[x_i=\frac{dis_i-dis_{i-1}+h_i-h_{i-1}}{2}
\]

将所有\(x_i\)相加得到的就是我们的答案,为

\[\sum_{i=1}^{n}x_i=\frac{dis_n+h_n}{2}
\]

所以,我们只需要使到达最后的障碍物时的高度最小即可。那么接下来的问题是如何保证过程合法。我们可以通过递推的方式,得到经过每个障碍时的高度上下界,看过程中是否出现不合法的情况即可。

关于上下界的递推,还有一个需要注意的地方。如果我们一直向下,可能会低于障碍的下界,那么我们就需要点几下回到下界。但是每点一次,最终的高度就会上升2,所以还要考虑一下一直向下得到的高度与\(a[i]+1\)的差值的奇偶性才能得到正确的下界。上界也是同样的道理。

代码

#include <iostream>
#include <cstdio>
#define N 500002
using namespace std;
int n,d,i,x[N],a[N],b[N],down,up;
int read()
{
char c=getchar();
int w=0,f=1;
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c<='9'&&c>='0'){
w=w*10+c-'0';
c=getchar();
}
return w*f;
}
int main()
{
n=read();d=read();
for(i=1;i<=n;i++) x[i]=read(),a[i]=read(),b[i]=read();
for(i=1;i<=n;i++){
int dis=x[i]-x[i-1];
if(down-dis>=a[i]+1) down-=dis;
else{
if((a[i]+1-down+dis)%2==0) down=a[i]+1;
else down=a[i]+2;
}
if(up+dis<=b[i]-1) up+=dis;
else{
if((up+dis-b[i]+1)%2==0) up=b[i]-1;
else up=b[i]-2;
}
if(down>up){
puts("NIE");
return 0;
}
}
int ans=(x[n]+down)/2;
printf("%d\n",ans);
return 0;
}

[POI2017] Flappy Bird的更多相关文章

  1. bzoj 4723 [POI2017]Flappy Bird 模拟

    [POI2017]Flappy Bird Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 482  Solved: 196[Submit][Status ...

  2. 【BZOJ4723】[POI2017]Flappy Bird DP

    [BZOJ4723][POI2017]Flappy Bird Description <飞扬的小鸟>是一款风靡的小游戏.在游戏中,小鸟一开始位于(0,0)处,它的目标是飞到横坐标为X的某个 ...

  3. BZOJ 4723: [POI2017]Flappy Bird

    Description 从一个点到一条直线,每次纵坐标只能增加或减少1,有些位置有障碍,求最少增加步数. Sol 贪心. 或许是贪心吧...反正在可到达的范围内,纵坐标尽量小... 做的时候维护一下两 ...

  4. BZOJ4723[POI2017]Flappy Bird——模拟

    题目描述 <飞扬的小鸟>是一款风靡的小游戏.在游戏中,小鸟一开始位于(0,0)处,它的目标是飞到横坐标为X的某个位置 上.每一秒,你可以选择点击屏幕,那么小鸟会从(x,y)飞到(x+1,y ...

  5. BZOJ4723: [POI2017]Flappy Bird

    $n \leq 500000$个水管,每秒横坐标加一,纵坐标如果你点击就+1否则-1,问从$(0,0)$飞到$m$处最少点多少次,或者说明无解. 如果能飞到某个水管的高度区间$[L,R]$,那么答案肯 ...

  6. canvas 制作flappy bird(像素小鸟)全流程

    flappy bird制作全流程: 一.前言 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时, 近年来移动web的普及为 ...

  7. 自己动手写游戏:Flappy Bird

    START:最近闲来无事,看了看一下<C#开发Flappy Bird游戏>的教程,自己也试着做了一下,实现了一个超级简单版(十分简陋)的Flappy Bird,使用的语言是C#,技术采用了 ...

  8. C语言版flappy bird黑白框游戏

    在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird.代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了 ...

  9. 闲扯游戏编程之html5篇--山寨版《flappy bird》源码

    新年新气象,最近事情不多,继续闲暇学习记点随笔,欢迎拍砖.之前的〈简单游戏学编程语言python篇〉写的比较幼稚和粗糙,且告一段落.开启新的一篇关于javascript+html5的从零开始的学习.仍 ...

随机推荐

  1. 阶段3 1.Mybatis_08.动态SQL_01.mybatis中的动态sql语句-if标签

    创建新的工程 复制到新建的项目里面 pom.xml依赖部分复制过来 dao中整理代码 只保留四个查询 映射文件也只保留四个查询方法 增加一个根据条件查询的方法. 由于用了别名,所以parpameter ...

  2. 使用cesium中的scene.open中遇到的几个问题

    有些服务是发在场景(scene)下的,超图提供了一个很方便的方法:scene.open,这个方法会将场景中所有的图层(无论是OSGB还是影像和地形)加载进来.同时这个方法会自带一个自动地位功能,具体实 ...

  3. 【MM系列】SAP MR21修改标准价

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]在SAP里查看数据的方法   前言部 ...

  4. zip函数用于对列表对应元素打包成元组

    zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以 ...

  5. Bean的构造器注入和setter注入

    链接:https://pan.baidu.com/s/1vixLrr8harzZMwLsIB1Mwg 提取码:ou1n 首先要明白,为什么要注入? IOC容器会在初始化时,创建好所有的bean对象的实 ...

  6. 函数 FUNCTION

    函数 FUNCTION 定义: 带名字的代码块,用于执行具体任务. 注意: 应给函数指定描述性名称,只是用小写字母和下划线. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何 ...

  7. DateHandler日期处理工具(JSP中使用后台工具类)

    1.DateHandler.java package Utils.dateHandler; import java.text.ParseException; import java.text.Simp ...

  8. Hibernate-Criteria学习笔记

    hibernate_jpa注解 目前最新版的hibernate,5.2,底层整合了jpa,用idea的hibernate工具生成实体时,实体包含了注解的配置文件,缺一不可 如,用户类实体,生成之后是这 ...

  9. oracle系统视图SQL语句整理

    -- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是视图 -- DBA_TABLES意为DBA拥有的或可以访问的所有的关系表. -- ALL_TABLES意为 ...

  10. 使用Docker部署Spring-Boot+Vue博客系统

    在今年年初的时候,完成了自己的个Fame博客系统的实现,当时也做了一篇博文Spring-boot+Vue = Fame 写blog的一次小结作为记录和介绍.从完成实现到现在,也断断续续的根据实际的使用 ...