zoukankan      html  css  js  c++  java
  • BZOJ 4723: [POI2017]Flappy Bird

    4723: [POI2017]Flappy Bird

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 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 11
    4 1 4
    7 -1 2
    8 -1 3
    9 0 2

    Sample Output

    5

    HINT


    Source

    [Submit][Status][Discuss]

    分析

    注意,这小鸟可以“打洞”,就是说,高度变成负数也是合法的!

    那么,只要我们通过了最后的一个障碍物,就一定可以不用进行任何点击地飞到目的地。

    相邻两个障碍物之间的横坐标之差就是这一段距离中最大的上升(或下降)高度,就可以计算出飞到下一个障碍物处可以到达的区间范围,再用障碍物的要求卡一下即可。

    代码

     1 #include <bits/stdc++.h>
     2 const int maxn = 500005;
     3 int n, x[maxn], a[maxn], b[maxn], A, B;
     4 int main(){
     5     scanf("%d%*d", &n);
     6     for (int i = 1; i <= n; ++i)
     7         scanf("%d%d%d", x + i, a + i, b + i);
     8     for (int i = 1; i <= n; ++i) {
     9         int tmp = x[i] - x[i - 1];
    10         A = std::max(A - tmp, a[i] + 1);
    11         B = std::min(B + tmp, b[i] - 1);
    12         if ((A & 1) != (x[i] & 1))A = A + 1;
    13         if ((B & 1) != (x[i] & 1))B = B - 1;
    14         if (A > B)return puts("NIE"), 0;
    15     }
    16     printf("%d
    ", (A + x[n]) >> 1);
    17 }
    BZOJ_4723.cpp

    @Author: YouSiki

  • 相关阅读:
    关于'for' loop initial declaration used outside C99 mode的说明
    Qt编写安防视频监控系统50-地图配置
    当封装已成为往事
    关于Qt数据库相关开发的一些经验总结
    Qt编写安防视频监控系统49-多数据库支持
    Qt编写安防视频监控系统48-视频参数
    设计测试用例优点和缺点
    常用的七种性能测试方法
    测试资料学习网站推荐
    打印$_SERVER['REQUEST_SCHEME']为空
  • 原文地址:https://www.cnblogs.com/yousiki/p/6106684.html
Copyright © 2011-2022 走看看