AcWing 1511:笨鸟

news2024/11/21 1:43:17

【题目来源】
https://www.acwing.com/problem/content/1513/

【题目描述】
小王特别喜欢玩 flappy birds,但是他比较菜,所以向大家寻求帮助,游戏规则大家都懂,
每一秒如果点击屏幕,小鸟会从 (x,y) 飞到 (x+1,y+1);如果不点击屏幕,小鸟则会飞到 (x+1,y−1)
笨鸟
初始坐标 (0,0),要飞到横坐标为 X 的地方,纵坐标不做要求。
沿途有一些
障碍,用 (x0,a,b) 的形式给出,表示在横坐标为 x0 的地方 y≤ay≥b 的地方都是障碍,碰到或者擦边都算游戏失败。
也就是说,小鸟通过此横坐标时纵坐标必须在 (a,b) 这个范围内,且
纵坐标不等于 a 或 b
如果这只笨鸟根本没有办法飞到终点横坐标,则输出”Stupid bird!”(不包含引号)。
否则输出通过每个障碍以及终点横坐标时所需要点击屏幕的最少次数。
注意:在考虑通过某个障碍所需最少点击次数时,不用考虑此操作对通过后面障碍物的影响以及是否能够确保通关。

【输入格式】
第一行两个整数 n,X。
接下来 n 行,每行三个整数 (xi,ai,bi),含义见题目描述。

【输出格式】
若笨鸟飞不到终点,输出“Stupid bird!”(不含引号) 。
否则输出包含 n+1 行。
前 n 行,每行一个整数,表示通过每个障碍时所需最少的点击次数。
最后一行,表示到达终点横坐标时所需的最少点击次数。

【数据范围】
0≤n≤5×10^5
1≤X≤10^9
0<xi<X
−10^9≤ai<bi≤10^9
x_i<x_{i+1}

【输入样例】
4 11
4 1 4
7 -1 2
8 -1 3
9 0 2

【输出样例】
3
4
4
5
5

【算法分析】
● 本题题意可参见原型游戏 flappy bird:
https://flappybird.io/
● 求解本题,请参考如下示意图。特别要注意 b 和 a 在图中的位置以及 up 及 down 的含义。显然,up=up+x-lastdown=down-(x-last)

● 不管障碍物距 0 点的距离 x 是偶数还是奇数,能够到达的 y 值均是离散的且相差 2。之所以离散,是因为小鸟的坐标是按秒更新的。且,若障碍物距 0 点的距离 x 值是偶数/奇数,则能够到达的离散 y 值也是偶数/奇数。

据上,便有了判断奇偶性的要求。代码如下所示。

if((x&1) != (a&1)) a++;
if((x&1) != (b&1)) b--;

即,若 x 与 a 的奇偶性不一致,则 a++;若 x 与 b 的奇偶性不一致,则 b++。
(注意:a、b 在示意图中的位置)

此代码用位运算 & 判断奇偶性。即,
若 x&1 为真,则 x 为奇数;否则,x 为偶数

● 通过每个障碍时所需最少的点击次数
设 x 是障碍物距 0 点的距离,y 是在 x 处时“笨鸟”通过障碍物的坐标,up 是点击次数,则可知 up-(x-up)=y,也即 up=(x+y)/2。若要使 up 最小,则取 y 的最小值 down,故得通过每个障碍时所需最少的点击次数为 
up=(x+down)/2。此处的 up 对应于下面代码中的 imin[i]。

【算法代码】

#include <bits/stdc++.h>
using namespace std;

const int N=5e5+5;
int imin[N]; //minimum number of per step
bool flag=true;
int up,down; //scope
int last; //Coordinates of the last obstacle

int main() {
    int n,X;
    cin>>n>>X;
    for(int i=1; i<=n; i++) {
        int x,a,b;
        cin>>x>>a>>b;
        up=up+x-last;
        down=down-(x-last);

        //The range that the bird can fly
        a++,b--; //can't reach to a and b
        if((x&1) != (a&1)) a++;
        if((x&1) != (b&1)) b--;
        up=min(up,b);
        down=max(down,a);

        //Update the bird interval
        if(up<down) {
            flag=false;
            break;
        }
        imin[i]=(x+down)/2;
        last=x;
    }

    if(!flag) cout<<"Stupid bird!"<<endl;
    else {
        for(int i=1; i<=n; i++) cout<<imin[i]<<endl;
        cout<<imin[n]<<endl;
    }

    return 0;
}

/*
in:
4 11
4 1 4
7 -1 2
8 -1 3
9 0 2

out:
3
4
4
5
5
*/




【参考文献】
https://www.luogu.com.cn/problem/P1941
https://www.acwing.com/solution/content/88484/
https://www.acwing.com/solution/content/23727/



 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1895841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3C电子制造行业MES系统,提高企业生产效率

随着科技的不断进步&#xff0c;3C电子制造行业正迎来传统工厂向数字化工厂转型的阶段。在这场变革中&#xff0c;MES系统发挥着重要的作用&#xff0c;成为了企业变革的“智慧大脑”&#xff0c;引领着生产流程的优化和升级。 那么&#xff0c;MES系统究竟有哪些功能&#xf…

新纪录将圆周率计算到了小数点后202万亿位 用了28块61.44TB SSD

独立存储研究机构StorageReview与闪存领导厂商Solidigm联合宣布&#xff0c;将圆周率计算到了小数点后202万亿位(确切地说是202,112,290,000,000位数)&#xff0c;相比今年3月初的原有记录105万亿位几乎翻了一番。 本次计算采用了戴尔PowerEdge R760服务器&#xff0c;配置Int…

Jenkins 任务中的 java.lang.InterruptedException 异常解析与解决

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

[激光原理与应用-98]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 2 - 什么是激光器焊接

目录 一、什么是激光焊接 1.1 概述 1.2 激光焊接的优点 二、激光焊接的应用 2.1 哪些场合必须使用激光焊接 1. 汽车制造业 2. 航空航天领域 3. 电子行业&#xff1a;消费类电子3C 4. 医疗器械制造 5. 新能源锂电池行业 6. 其他领域 三、激光焊接的分类 3.1 按焊接…

scratch猫咪追星星 2024年6月中国电子学会 图形化编程 scratch编程等级考试二级真题和答案解析

目录 scratch猫咪追星星 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、…

入门篇:构建第一个鸿蒙ArkTS应用(Stage模型)

为确保运行效果&#xff0c;本文以使用DevEco Studio NEXT Developer Beta1版本为例&#xff0c;点击此处获取下载链接。 创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New &…

月之暗面kimi引擎的底层推理系统,如何引领智能助手技术的未来

在人工智能领域,一个令人瞩目的超级明星悄然升起——那就是“月之暗面kimi”引擎。这个引擎不仅拥有强大的底层推理系统方案,还搭载了独特的调度技术,让Kimi智能助手成为了众人关注的焦点。今天,我们将深入探索这一技术的奥秘,看看它是如何改变智能助手的未来。 首先,…

技术革新引领钢材质量智能化检测新纪元,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建钢材工业生产场景下钢材缺陷智能检测识别系统

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;其应用领域不断拓宽&#xff0c;正深刻改变着传统产业的运作模式。在钢材生产这一基础工业领域&#xff0c;AI的引入正为钢材的质量检测带来革命性的变革。 在传统的钢材生产流程中&#xff0c;质量检测是确…

Hadoop权威指南-读书笔记-03-Hadoop分布式文件系统

Hadoop权威指南-读书笔记 记录一下读这本书的时候觉得有意思或者重要的点~ 还是老样子~挑重点记录哈&#x1f601;有兴趣的小伙伴可以去看看原著&#x1f60a; 第三章 Hadoop分布式文件系统 当数据集的大小超过一台独立的物理计算机的存储能力时&#xff0c;就有必要对它进行分…

react ts 封装3D柱状图,支持渐变

留档&#xff0c;以防忘记 bar3D.tsx import React, { useEffect, useRef, useState } from react; import * as echarts from echarts; import echarts/lib/chart/bar; import echarts/lib/chart/pictorialBar; import echarts/lib/component/grid; import echarts/lib/comp…

[C++][CMake][CMake基础]详细讲解

目录 1.CMake简介2.大小写&#xff1f;3.注释1.注释行2.注释块 4.日志 1.CMake简介 CMake是一个项目构建工具&#xff0c;并且是跨平台的 问题 – 解决 如果自己动手写Makefile&#xff0c;会发现&#xff0c;Makefile通常依赖于当前的编译平台&#xff0c;而且编写Makefile的…

利用redis数据库管理代理库爬取cosplay网站-cnblog

爬取cos猎人 数据库管理主要分为4个模块&#xff0c;代理获取模块&#xff0c;代理储存模块&#xff0c;代理测试模块&#xff0c;爬取模块 cos猎人已经倒闭&#xff0c;所以放出爬虫源码 api.py 为爬虫评分提供接口支持 import requests import concurrent.futures import …

鸿蒙应用实践:利用扣子API开发起床文案生成器

前言 扣子是一个新一代 AI 应用开发平台&#xff0c;无需编程基础即可快速搭建基于大模型的 Bot&#xff0c;并发布到各个渠道。平台优势包括无限拓展的能力集&#xff08;内置和自定义插件&#xff09;、丰富的数据源&#xff08;支持多种数据格式和上传方式&#xff09;、持…

lodash中flush的使用(debounce、throttle)

在项目的配置中&#xff0c;看到了一个请求&#xff0c;类似是这样的 import { throttle } from lodash-es// 请求函数 async function someFetch(){const {data} await xxx.post()return data }// 节流函数 async function throttleFn(someFetch,1000)// 执行拿到数据函数 a…

掌握电路交换与分组交换:计算机网络的核心技术

计算机网络是现代信息社会的基石&#xff0c;而交换技术是实现网络通信的核心。本文将详细介绍两种典型的交换方式&#xff1a;电路交换和分组交换&#xff0c;帮助基础小白快速掌握这两种技术的基本概念和区别。 什么是电路交换&#xff1f; 电路交换&#xff08;Circuit Swi…

斯坦福提出首个开源视觉语言动作大模型OpenVLA

OpenVLA&#xff1a;开源视觉语言动作大模型 摘要模型结构训练数据训练设施实验总结和局限性 项目主页 代码链接 论文链接 模型链接 摘要 现有的VLA(Vision-Language-Action )模型具有这些局限性&#xff1a; 1)大多封闭且开放&#xff1b; 2)未能探索高效地为新任务微调VLA的方…

香橙派AIpro做目标检测

使用香橙派AIpro做目标检测 文章目录 使用香橙派AIpro做目标检测香橙派AIpro开发板介绍香橙派AIpro应用体验快速体验香橙派的AI功能YOLOV5s目标检测使用场景描述图像目标检测视频目标检测摄像头目标检测YOLOv5s 目标检测的运行结果分析香橙派 AIpro 在运行过程中的表现 香橙派A…

【Vue报错】v-bind动态绑定src无效

今天遇到v-bind动态绑定video的src&#xff0c;出现无效的问题 但是翻看以前的项目都是没问题的 之前的项目 现在的项目 发现并不能呈现视频效果 进行了改进&#xff0c;成功展示

Java数据结构9-排序

1. 排序的概念及引用 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录…

【ROS2】Ubuntu 24.04 源码编译安装 Jazzy Jalisco

目录 系统要求 系统设置 设置区域启用所需的存储库安装开发工具 构建 ROS 2 获取 ROS 2 代码使用 rosdep 安装依赖项安装额外的 RMW 实现&#xff08;可选&#xff09;在工作区构建代码 设置环境 尝试一些例子 下一步 备用编译器 Clang保持最新状态 故障排除 卸载 系统要求 当前…