BZOJ 4723: [POI2017]Flappy Bird
2016-11-27 16:24
253 查看
4723: [POI2017]Flappy Bird
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 34 Solved: 16
[Submit][Status][Discuss]
Description
《飞扬的小鸟》是一款风靡的小游戏。在游戏中,小鸟一开始位于(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)飞到目的地最少需要点击多少次屏幕。
Input
第一行包含两个整数n(0<=n<=500000),X(1<=n<=10^9)。接下来n行,每行三个整数x[i],a[i],b[i](0<x[i]<X,-10^9<=a[i]<b[i]<=10^9)。
数据保证x[i]<x[i+1]。
Output
如果无论如何都飞不到目的地,输出NIE,否则输出点击屏幕的最少次数。Sample Input
4 114 1 4
7 -1 2
8 -1 3
9 0 2
Sample Output
5HINT
#include <bits/stdc++.h> const int maxn = 500005; int n, x[maxn], a[maxn], b[maxn], A, B; int main(){ scanf("%d%*d", &n); for (int i = 1; i <= n; ++i) scanf("%d%d%d", x + i, a + i, b + i); for (int i = 1; i <= n; ++i) { int tmp = x[i] - x[i - 1]; A = std::max(A - tmp, a[i] + 1); B = std::min(B + tmp, b[i] - 1); if ((A & 1) != (x[i] & 1))A = A + 1; if ((B & 1) != (x[i] & 1))B = B - 1; if (A > B)return puts("NIE"), 0; } printf("%d\n", (A + x ) >> 1); }
BZOJ_4723.cpp
@Author: YouSiki
相关文章推荐
- 【BZOJ4723】【POI2017】Flappy Bird
- BZOJ 4723 POI2017 Flappy Bird
- BZOJ4723 [POI2017]Flappy Bird
- BZOJ4723: [POI2017]Flappy Bird
- BZOJ4723 [POI2017]Flappy Bird
- 【BZOJ】4723 [POI2017] Flappy Bird
- 【bzoj4723】 [POI2017]Flappy Bird
- 4723: [POI2017]Flappy Bird
- 【BZOJ4723】【POI2017】Sabota?
- BZOJ 4723 Flappy Bird
- 【BZOJ4723】[POI2017]Flappy Bird DP
- bzoj4726 [POI2017]Sabota 二分+暴力
- [BZOJ]4726 [POI2017] Sabota? 树形Dp
- BZOJ4726 [POI2017]Sabota?
- [POI2017] Flappy Bird 题解
- BZOJ 4726 POI2017 Sabota? 树形DP
- BZOJ 4726: [POI2017]Sabota?
- 【BZOJ】4726 [POI2017] Sabota?
- BZOJ4723: [POI2017]Flappy Bird
- 【bzoj4724】[POI2017]Podzielno 二分