zoukankan      html  css  js  c++  java
  • Flappy Bird

    问题 A: Flappy Bird

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 404  解决: 72
    [提交] [状态] [讨论版] [命题人:admin]

    题目描述

    《飞扬的小鸟》是一款风靡的小游戏。在游戏中,小鸟一开始位于(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<=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]。

    输出

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

    样例输入

    4 11
    4 1 4
    7 -1 2
    8 -1 3
    9 0 2
    

    样例输出

    5
    

    提示

    题意

      中文题意,不做解释。

    分析

      1、这个鸟要从(0,0)到(x,y)不管怎么飞必须要点击(x+y)/2次

      2、对于同一列的障碍物,鸟可以计算出来一个能飞到的最高点和最低点。

      3、一直递推到最后,利用1推出的结论求出点击次数即可。

    ///  author:Kissheart  ///
    #include<stdio.h>
    #include<algorithm>
    #include<iostream>
    #include<string.h>
    #include<vector>
    #include<stdlib.h>
    #include<math.h>
    #include<queue>
    #include<deque>
    #include<ctype.h>
    #include<map>
    #include<set>
    #include<stack>
    #include<string>
    #define INF 0x3f3f3f3f
    #define FAST_IO ios::sync_with_stdio(false)
    const double PI = acos(-1.0);
    const double eps = 1e-6;
    const int MAX=5e5+10;
    const int mod=1e9+7;
    typedef long long ll;
    using namespace std;
    #define gcd(a,b) __gcd(a,b)
    inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
    inline ll qpow(ll a,ll b){ll r=1,t=a; while(b){if(b&1)r=(r*t)%mod;b>>=1;t=(t*t)%mod;}return r;}
    inline ll inv1(ll b){return qpow(b,mod-2);}
    inline ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1;y=0;return a;}ll r=exgcd(b,a%b,y,x);y-=(a/b)*x;return r;}
    inline ll read(){ll x=0,f=1;char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) x=x*10+c-'0';return x*f;}
    //freopen( "in.txt" , "r" , stdin );
    //freopen( "data.txt" , "w" , stdout );
    ll n,X;
    ll x[MAX],a[MAX],b[MAX];
    int main()
    {
        scanf("%lld%lld",&n,&X);
        for(ll i=1;i<=n;i++)
            scanf("%lld%lld%lld",&x[i],&a[i],&b[i]);
        ll t,maxn=0,minn=0,last=0,p;
        for(ll i=1;i<=n;i++)
        {
            t=x[i]-last;
            maxn=maxn+t;
            minn=minn-t;
            if(minn<=a[i])
            {
                p=a[i]-minn;
                if(p%2) p+=1;
                else p+=2;
                minn=minn+p;
            }
            if(maxn>=b[i])
            {
                p=maxn-b[i];
                if(p%2) p+=1;
                else p+=2;
                maxn=maxn-p;
            }
            //printf("%lld %lld
    ",minn,maxn);
            if(maxn<minn)
            {
                printf("NIE
    ");
                return 0;
            }
            last=x[i];
        }
        printf("%lld
    ",(minn+x[n])/2);
        return 0;
    }
     
    View Code
  • 相关阅读:
    CentOS 7下PXE+Kickstart无人值守安装操作系统
    利用pentestbox打造ms17-010移动"杀器"
    XSS测试代码
    sublime Text3基本配置记录+python
    CTF中那些脑洞大开的编码和加密
    信息安全相关资源
    RIP 实验
    python输出有色记录
    下载Chrome商店和Youtube资源
    mysql使用问题记录
  • 原文地址:https://www.cnblogs.com/Kissheart/p/10100858.html
Copyright © 2011-2022 走看看