欢迎使用优快云-markdown编辑器

本文解析了FlappyBird游戏的算法实现,介绍了如何通过计算找出飞越障碍所需的最小点击次数,利用状态转移的方法更新飞行位置,并确保路径的可行性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flappy bird
http://www.gdfzoj.com/oj/problem/469
题目分析:
题目等价于寻找到达X时下端可以飞到的最小值r,根据从原点飞向(X,0)路径下飞线段比上飞线段多r,即有点击次数最小值为(r+X)/2.
方法分析:
每一个状态向下一个状态转移时要取(障碍物下端+1)与(这一个状态下端最小值继续向下飞行能到达的下端最小值)取max.
注意:
因为x[i]向x[i+1]飞行时能到达的位置纵坐标的奇偶性与x[1]的奇偶性相同当更新状态两者奇偶性不同时要累加r直到奇偶性相同为止.

#include<cstdio>
#include<algorithm>
#include<cmath>

using namespace std;

int n,lnew,rnew,l,r,X,x[500000],a[500000],b[500000];

int main(){
    scanf("%d",&n);
    scanf("%d",&X);
    for (int i=1;i<=n;i++) scanf("%d%d%d",&x[i],&b[i],&a[i]);
    bool p=false;
    for (int i=1;i<=n;i++){
        lnew=min(l+x[i]-x[i-1],a[i]-1);
        if ((lnew&1)^(x[i]&1)) lnew--;
        l=lnew;
        rnew=max(r-x[i]+x[i-1],b[i]+1);
        if ((rnew&1)^(x[i]&1)) rnew++;
        r=rnew;
        if (lnew<rnew) p=true;
    }
    if (p) printf("NIE\n");else printf("%d\n",(rnew+x[n])/2);
    return 0;
}
资源下载链接为: https://pan.quark.cn/s/9648a1f24758 Java JDK(Java Development Kit)是Java编程语言的核心组件,为开发和运行Java程序提供了必要的工具和环境。JDK 8是Oracle公司推出的一个重要版本,它引入了许多新特性和改进,极大地提升了开发效率和代码质量,对开发者来说具有极高的实用价值。 本次提供的“jdk-8u251-macosx-x64.dmg”安装包是专为Mac OS X系统设计的64位版本,其中不仅包含了Java运行环境(JRE),还涵盖了丰富的开发工具,方便用户在Mac平台上进行Java程序的开发与运行。 JDK 8的关键更新和特性如下: Lambda表达式:这是JDK 8的一项重大语法创新,允许开发者使用简洁的匿名函数替代复杂的多行回调代码,从而使代码更加简洁、易读且高效。 方法引用与构造器引用:与Lambda表达式配合使用,可以更直观地引用已有的方法或构造器,进一步减少冗余代码,提升代码的可维护性。 Stream API:这是一个用于处理集合的新API,采用声明式处理方式,使集合操作(如过滤、映射和归约等)更加高效且易于理解。 日期和时间API的改进:JDK 8对日期和时间API进行了重构,引入了java.time包,包含LocalDate、LocalTime和LocalDateTime等类,替代了原有的java.util.Date和java.util.Calendar,使日期和时间的处理更加友好和灵活。 Optional类:为解决null对象导致的空指针异常问题,JDK 8引入了Optional类,它是一个容器对象,可以表示一个值存在或不存在,从而有效避免空指针异常。 接口的默认方法和静态方法:接口现在可以定义默认方法(使用default关键字)和静态方法。默认方法允许在不破坏向后
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值