洛谷P9241 [蓝桥杯 2023 省 B] 飞机降落

embedded/2025/2/24 17:01:34/

题目描述

N 架飞机准备降落到某个只有一条跑道的机场。其中第 i 架飞机在 Ti​ 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di​ 个单位时间,即它最早可以于 Ti​ 时刻开始降落,最晩可以于 Ti​+Di​ 时刻开始降落。降落过程需要 Li​ 个单位时间。

一架飞机降落完毕时,另一架飞机可以立即在同一时刻开始降落,但是不能在前一架飞机完成降落前开始降落。

请你判断 N 架飞机是否可以全部安全降落。

输入格式

输入包含多组数据。

第一行包含一个整数 T,代表测试数据的组数。

对于每组数据,第一行包含一个整数 N。

以下 N 行,每行包含三个整数 Ti​,Di​,Li​。

输出格式

对于每组数据,输出 YES 或者 NO,代表是否可以全部安全降落。

输入输出样例

输入 

2
3
0 100 10
10 10 10
0 2 20
3
0 10 20
10 10 20
20 10 20

输出

YES
NO

说明/提示

【样例说明】

对于第一组数据,可以安排第 3 架飞机于 0 时刻开始降落,20 时刻完成降落。安排第 2 架飞机于 20 时刻开始降落,30 时刻完成降落。安排第 1 架飞机于 30 时刻开始降落,40 时刻完成降落。

对于第二组数据,无论如何安排,都会有飞机不能及时降落。

【评测用例规模与约定】

对于 30% 的数据,N≤2。

对于 100% 的数据,1≤T≤10,1≤N≤10,0≤Ti​,Di​,Li​≤105。

蓝桥杯 2023 省赛 B 组 D 题。
P9241 [蓝桥杯 2023 省 B] 飞机降落 - 洛谷

题目及思路:这题先看数据范围,飞机个数是1≤N≤10,所以我们可以通过DFS枚举所有可能的降落顺序,验证是否存在满足条件的排列。若存在任意一种可行顺序,则返回"YES",否则返回"NO"。
代码呢主要就是套用dfs模板,然后还有其他一些地方解释一下。

代码解释:

  1. 数据结构

    • plane结构体存储飞机的到达时间t、最大盘旋时间d(即在t + d之前必须开始降落)和降落所需时间l

  2. DFS函数

    • 参数cnt表示已降落飞机数,last表示上一架飞机完成降落的时间,planes为飞机数组。

    • 终止条件:当所有飞机都已降落(cnt >= n),设置成功标志flag = 1

    • 递归逻辑:遍历所有未使用的飞机,若当前飞机的时间窗口允许在last之后开始降落(planes[i].t + d >= last),则标记为已使用,并计算下一架飞机的最早可用时间(nextTime = max(last, t) + l),继续递归。

这里解释一下nextTime为什么要取两者的较大值。飞机只能在到达之后才能开始降落,所以如果上一架飞机降落完成的时间`last`比当前飞机的到达时间`t`晚,那么当前飞机必须等到`last`才能开始降落。反之,如果当前飞机到达时间`t`更晚,那么它需要等到`t`才能开始。因此,`nextTime`实际上是当前飞机降落结束的时间,也就是下一架飞机可以开始降落的最早时间。 

以下是我提交通过的C语言代码,仅供参考:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<limits.h>
#include<stdlib.h>
#include<math.h>
#include <stdbool.h>int t, n = 0; bool used[1000]; int flag = 0;typedef struct
{int t;int d;int l;
}plane;void dfs(int cnt, int last, plane *planes)
{//last:表示上一架飞机完成降落的结束时间(即跑道可用的起始时间)。if (cnt >= n){flag = 1;return;}for (int i = 0; i < n; i++){if (!used[i]){if (planes[i].t + planes[i].d >= last){used[i] = true;// nextTime:当前飞机完成降落后,跑道再次可用的时间(即下一架飞机的最早可用时间)。int nextTime = (last > planes[i].t ? last : planes[i].t) + planes[i].l;dfs(cnt + 1, nextTime, planes);used[i] = false;}}}
}
int main() 
{scanf("%d", &t);while (t--){memset(used, 0, sizeof(used));plane planes[11];scanf("%d", &n);for (int i = 0; i < n; i++){scanf("%d %d %d", &planes[i].t, &planes[i].d, &planes[i].l);}flag = 0;dfs(0, 0, planes);if (flag == 1){printf("YES\n");}else{printf("NO\n");}}return 0;
}


http://www.ppmy.cn/embedded/164864.html

相关文章

【开源项目】分布式文本多语言翻译存储平台

分布式文本多语言翻译存储平台 地址&#xff1a; Gitee&#xff1a;https://gitee.com/dreamPointer/zza-translation/blob/master/README.md 一、提供服务 分布式文本翻译服务&#xff0c;长文本翻译支持流式回调&#xff08;todo&#xff09;分布式文本多语言翻译结果存储服…

MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用

目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…

基于springboot+vue的考研互助平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

hydra docker版本

最近做ssh暴力破解实验&#xff0c;由于服务器上面软件依赖太乱了&#xff0c;导致我花了好久没能成功编译出hydra&#xff0c;于是想到了使用docker版本的hydra&#xff0c;最后成功的完成了ssh暴力破解实验&#xff5e; ailx10 1958 次咨询 网络安全优秀回答者 互联网行业…

从0开始的操作系统手搓教程 6 ——检查我们的内存信息

目录 如何检测内存 使用0xE820办法获取所有的内存 使用E801办法获取我们的内存 大保底&#xff1a;使用0x88功能 开始实现 修正我们的跳转偏移 开始内存检查 下一篇 现在&#xff0c;我们可以进一步迈向我们的内核了。那就是加载我们的内核。刚刚我们说过&#xff0c;加…

前沿科技一览未来发展趋势

新能源在分布式能源系统中的应用越来越广泛。这不仅提高了能源使用效率&#xff0c;还促进了环境。下面就来谈谈这个话题。 首先&#xff0c;新能源比如太阳能和风能&#xff0c;在分布式能源系统中可以有效减少对传统能源的依赖。例如&#xff0c;家庭安装太阳能板就可以自己…

【OpenCV】入门教学

&#x1f3e0;大家好&#xff0c;我是Yui_&#x1f4ac; &#x1f351;如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f680;如有不懂&#xff0c;可以随时向我提问&#xff0c;我会全力讲解~ &#x1f52…

14.8 Auto-GPT 自主智能体设计解密:构建具备长期记忆的智能决策系统

Auto-GPT 自主智能体设计解密:构建具备长期记忆的智能决策系统 关键词:Auto-GPT 架构设计、自主智能体开发、LangChain Agents、长期记忆系统、工具链编排 1. 自主智能体的核心架构设计 Auto-GPT 系统架构图解: #mermaid-svg-NuDU1eo6sXqhA6Ve {font-family:"trebuch…