[POI2017] Flappy Bird (思维题)
来源:互联网 发布:超星尔雅网络课程网址 编辑:程序博客网 时间:2024/05/17 02:26
题目
Problem Description
《飞扬的小鸟》是一款风靡的小游戏。在游戏中,小鸟一开始位于(0,0)处,它的目标是飞到横坐标为X的某个位置上。
每一秒,你可以选择点击屏幕,那么小鸟会从(x,y)飞到(x+1,y+1),或者不点击,那么小鸟会飞到(x+1,y-1)。
在游戏中还有n个障碍物,用三元组(
xi ,ai ,bi )描述,表示在直线x=xi 上,y<=a_i或者y>=bi 的部分都是障碍物,碰到或者擦边都算游戏失败。请求出小鸟从(0,0)飞到目的地最少需要点击多少次屏幕。
Input
第一行包含两个整数n
(0<=n<=500000) ,X(1<=n<=109) 。
接下来n行,每行三个整数x[i],a[i],b[i](0<xi<X,−109<=ai<bi<=109) 。
数据保证xi<xi+1 。Output
如果无论如何都飞不到目的地,输出NIE,否则输出点击屏幕的最少次数。
Sample Input
4 11
4 1 4
7 -1 2
8 -1 3
9 0 2Sample Output
5
分析
- 我们注意到,从起点到某一个点,不用管怎么飞,它要“点击”次数是固定的(设是从(0,0)到 (x,y)那么就需要点击
y+x2 次),于是,我们就可以对于每一个水管来更新一下鸟在这所能到达的一个区间(程序中为 [L,R],意思是在 x=lx 这时,鸟能到达 [L,R] 这些高度的地方,其中 lx 是上一个管道的横坐标)。 - 由于目的地保证在最后一个水管之后,所以答案就是到达最终 L 所在的地方需要点击的次数。
- 不过还有一点要注意,就是注意到对于每个横坐标 x,鸟所能到的纵坐标奇偶性 必须与 x 相同,所以特判一下就行了。
- 给张图,可能容易理解一点(这里面蓝线与x轴夹角都是45度,红点代表这个横坐标鸟能到的区间)
程序
#include <cstdio>#include <algorithm>#define del (x-lx)using namespace std;int n,x,lx,l,r,L,R,ll,rr;int main(){ freopen("1.txt","r",stdin); scanf("%d%d",&n,&x); for (int i=1; i<=n; i++){ scanf("%d%d%d",&x,&l,&r); ll=L-del, rr=R+del; l+=((x&1)==(l&1) ? 2:1); //由于给的柱子相对于鸟所能到的地方为闭区间 r-=((x&1)==(r&1) ? 2:1); //所以处理一下,顺便把奇偶性统一了 L=max(l,ll); R=min(r,rr); if (L>R){puts("NIE"); return 0;} lx=x; } printf("%d",L+lx>>1);}
0 0
- [POI2017] Flappy Bird (思维题)
- bzoj4723 [POI2017]Flappy Bird
- BZOJ4723 [POI2017]Flappy Bird
- 4723: [POI2017]Flappy Bird
- [POI2017] Flappy Bird 题解
- 【bzoj4723】 [POI2017]Flappy Bird
- BZOJ4723: [POI2017]Flappy Bird
- 【BZOJ】4723 [POI2017] Flappy Bird
- BZOJ 4723 POI2017 Flappy Bird
- [POI2017] Flappy Bird 解题报告
- BZOJ4723——[POI2017]Flappy Bird
- [杂题 贪心] BZOJ4723: [POI2017]Flappy Bird
- flappy bird
- Flappy Bird
- flappy bird
- Flappy Bird
- flappy bird
- flappy bird
- 注解(Annotation)自定义注解
- Ajax 知识体系大梳理
- 二分法 1
- 二分法 2
- c风格的控制台
- [POI2017] Flappy Bird (思维题)
- RabbitMQ消息队列(二):"Hello, World"[转]
- 快速提高编辑效率支持一键导入word文档-逐浪CMS
- printf格式代码
- Gradle学习系列之一——Gradle快速入门
- MIT 公开课:Gilbert Strang《线性代数》课程笔记(汇总)
- 浅谈使用Fiddler工具发送post请求(带有json数据)以及get请求(Header方式传参)
- RabbitMQ消息队列(三):任务分发机制[转]
- 数字信号的 FFT 分析