*【每日一题 基础题】 [蓝桥杯 2023 省 B] 飞机降落

server/2024/12/23 18:28:59/

题目描述
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。

import java.util.*;  public class Main {  static final int N = 10;  static boolean[] st = new boolean[N];  static int n;  static boolean flag = false;  static int[] t = new int[N];  static int[] d = new int[N];  static int[] l = new int[N];  static void dfs(int u, int last) {  if (flag) return; // If we found one valid sequence, return  if (u == n) { // All planes have landed  flag = true;  return;  }  for (int i = 0; i < n; i++) {  if (!st[i]) { // If the current plane hasn't landed yet  if (t[i] + d[i] >= last) { // Check if it can wait for the last plane to land  st[i] = true; // Mark the plane as landed  if (t[i] > last) { // If this plane arrives after the last one has landed  dfs(u + 1, t[i] + l[i]); // Update last to arrival + landing time  } else { // If this plane arrives before or when the last one is landing  dfs(u + 1, last + l[i]); // Wait for the last plane to land  }  st[i] = false; // Backtrack  } else {  return; // If it can't wait, return  }  }  }  }  public static void main(String[] args) {  Scanner scanner = new Scanner(System.in);  int T = scanner.nextInt();  while (T-- > 0) {  n = scanner.nextInt();  for (int i = 0; i < n; i++) {  t[i] = scanner.nextInt();  d[i] = scanner.nextInt();  l[i] = scanner.nextInt();  }  for (int i = 0; i < N; i++) {  st[i] = false; // Reset the landing status  }  flag = false; // Reset the flag  dfs(0, 0); // Start DFS  if (flag) {  System.out.println("YES");  } else {  System.out.println("NO");  }  }  }  
}
import java.util.*;public class Main {static boolean flag=false;static boolean[] st;static int n;static Map<Integer,int[]> map;//static Scanner cin = new Scanner(System.in);public static void main(String[] args){int t= cin.nextInt();while(t--!=0)solve();}private static void solve() {n= cin.nextInt();flag=false;//标记,如果为true则搜素到答案st=new boolean[n];//初始胡标记数组,标记数组用于查询未安排下降的飞机,如果标记数组全为true,则代表能成功全部安排map=new HashMap<>();for (int i = 0; i < n; i++) {//输入int t= cin.nextInt();int d= cin.nextInt();int l= cin.nextInt();map.put(i,new int[]{t,d,l});}for (int i=0;i<n;i++){//枚举第一架飞机安排st[i]=true;//标记搜索dfs(map.get(i)[0]+map.get(i)[2]);//搜索下一驾飞机应该安排什么,并把时间传入下一个dfs,时间为飞机起飞时间加下降时间st[i]=false;//还原,取消标记}if(flag) System.out.println("YES");if(!flag) System.out.println("NO");}private static void dfs(int time) {boolean ok=true;//下面for循环中,如果没有再安排飞机,则代表已经成功安排所有飞机for (int i=0;i<n;i++){//枚举飞机if(st[i])continue;//如果已经下降了,不用再安排下降ok=false;if(time>map.get(i)[0]+map.get(i)[1])continue;int is=Math.max(time,map.get(i)[0])+map.get(i)[2];//时间取当前时间和飞机起飞时间最大那个,加上飞机下降时间st[i]=true;//标记dfs(is);//搜索下一驾飞机st[i]=false;//还原标记}if(ok)//代表搜素到答案 直接返回flag=true;return;}
}

http://www.ppmy.cn/server/152139.html

相关文章

【Super Tilemap Editor使用详解】(七):图块集纹理编辑器(Tileset Atlas Editor)

1、创建图块集后&#xff0c;我们可以打开 Atlas Editor Window&#xff08;纹理编辑器窗口&#xff09;以修改图块集的纹理和配置。 2、打开的方法 &#xff0c;从菜单中选择 "SuperTilemapEditor/Window/Atlas Editor Window" 打开 3、图块集切片设置&#xff08;S…

Golang的向前兼容性和toolchain规则,Go1.21.0

在 Go 1.21 中&#xff0c;在工具上新增了两个变化&#xff1a;增强了向前兼容性&#xff1b;工具链管理。 向前兼容性 在以前的版本中&#xff0c;Go 工具链尝试编译依赖于新版本的代码时&#xff0c;可能会遇到兼容性问题。例如&#xff0c;如果你的代码依赖于 Go 1.18 引入…

纯血鸿蒙APP实战开发——应用新功能引导实现案例

应用新功能引导实现案例 介绍 本文介绍如何使用high_light_guide三方库完成应用新版本功能导航。通过高亮区域与蒙版背景的明暗度对比&#xff0c;让用户快速锁定重点功能&#xff0c;了解版本变更和业务入口。 效果图预览 使用说明 点击页面上对应按钮或空白区域进入下一个…

1-Gin介绍与环境搭建 --[Gin 框架入门精讲与实战案例]

Gin 介绍 Gin 是一个用 Go&#xff08;Golang&#xff09;编写的 Web 框架&#xff0c;它以极高的性能和简洁的 API 设计而闻名。Gin 的设计灵感来自于 Martini 框架&#xff0c;但它的性能更优&#xff0c;延迟更低&#xff0c;非常适合构建高效的微服务和 RESTful API 服务。…

2024年12月16日Github流行趋势

项目名称&#xff1a;PDFMathTranslate 项目维护者&#xff1a;Byaidu reycn hellofinch Wybxc YadominJinta项目介绍&#xff1a;基于 AI 完整保留排版的 PDF 文档全文双语翻译&#xff0c;支持 Google/DeepL/Ollama/OpenAI 等服务&#xff0c;提供 CLI/GUI/Docker。项目star数…

Django 提供的会话(Session)相关的设置说明

SESSION_COOKIE_AGE 说明&#xff1a;定义会话 Cookie 的有效时间&#xff0c;单位为秒。 默认值&#xff1a;1209600&#xff08;即 2 周&#xff09;。 示例&#xff1a; SESSION_COOKIE_AGE 3600 # 1小时SESSION_EXPIRE_AT_BROWSER_CLOSE …

应用如何借用manifestxml追加gid权限

在mtk平台的fm测试方案中&#xff0c;需要应用app对dev/fm拥有rw的权限&#xff0c;而应用app作为system_app&#xff0c;属于system组&#xff0c;但是dev/fm 默认的用户组权限为&#xff1a; crw-rw---- 1 media media 492, 0 2020-01-26 04:10 dev/fm 由此可知只有…

Fiddler简单使用

Fiddler使用方法 1.作用 接口测试&#xff0c;发送自定义请求&#xff0c;模拟小型的接口测试定位前后端bug&#xff0c;抓取协议包&#xff0c;前后端联调构建模拟测试场景&#xff0c;数据篡改&#xff0c;重定向弱网测试&#xff0c;模拟限速操作&#xff0c;弱网&#xf…