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

news2024/12/25 0:49:13

题目描述
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.coloradmin.cn/o/2264984.html

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

相关文章

【项目实践】SpringBoot Nacos配置管理 map数据

本文是继续上一篇博客SpringBoot使用Nacos进行application.yml配置管理_nacos application配置-CSDN博客 目录 一、踩坑记录 二、亲测成功 方法一 方法二 一、踩坑记录 参考网上的一些案例&#xff0c;看到网上有人建议 Nacos 可以直接配置成 Map 类型&#xff0c;后台使用…

XILINX平台LINUX下高速ADC08060驱动

前置调研 原理图 AXI-FULL时序 由于项目需要实时性高&#xff0c;采用AXI-FULL接口ADC IP作为master端写入DDR中 引用&#xff1a; AXI_02 AXI4总线简介&#xff08;协议、时序&#xff09;_axi4总线时序-CSDN博客 AXI总线的访问 在ARM架构中&#xff0c;访问I/O地址通常通…

【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数

【C语言】函数指针与指针函数 文章目录 [TOC](文章目录) 前言一、指针数组二、数组指针三、函数指针四、指针函数五、函数指针数组六、回调函数七、参考资料总结 前言 使用工具&#xff1a; 1.DEVC 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、…

华为IPD流程6大阶段370个流程活动详解_第二阶段:计划阶段 — 86个活动

华为IPD流程涵盖了产品从概念到上市的完整过程,各阶段活动明确且相互衔接。在概念启动阶段,产品经理和项目经理分析可行性,PAC评审后成立PDT。概念阶段则包括产品描述、市场定位、投资期望等内容的确定,同时组建PDT核心组并准备项目环境。团队培训涵盖团队建设、流程、业务…

Adversarial Machine Learning(对抗机器学习)

之前把机器学习&#xff08;Machine Learning&#xff09;的安全问题简单记录了一下&#xff0c;这里有深入研究了一些具体的概念&#xff0c;这里记录一下方便以后查阅。 Adversarial Machine Learning&#xff08;对抗机器学习&#xff09; Adversarial Examples 相关内容Eva…

UE5 猎户座漂浮小岛 12 技能 瞬移 重力控制

1. 瞬移 1.1. 显示鼠标光标 “事件开始运行”添加显示鼠标逻辑 1.2. 释放技能蓝图 设置技能键 编写蓝图 1.3. 瞬移最大距离 2. 重力控制 2.1. 添加输入与动画 映射 重定向得到动画 新增状态FIRE_GracityControl 设置动画姿势 新增变量 切换动画 2.2. 技能蓝图&#xff08;…

SpiderFlow平台v0.5.0流程的执行过程

流程执行过程&#xff1a; 1. 流程启动 流程的执行通常从一个 开始节点 开始&#xff0c;该节点是整个爬虫任务的起点。开始节点没有实际的功能作用&#xff0c;主要作用是标记流程的起始。 执行顺序&#xff1a;在执行过程中&#xff0c;系统按照流程中的连接线顺序依次执行…

JVM系列(十二) -常用调优命令汇总

最近对 JVM 技术知识进行了重新整理&#xff0c;再次献上 JVM系列文章合集索引&#xff0c;感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分…

【Java基础面试题033】Java泛型的作用是什么?

Java的基础语法可以看尚硅谷的这个PDF&#xff1a;尚硅谷JavaSE基础/《Java从入门到精通(JDK17版)》_尚硅谷电子书.pdf Autism_Btkrsr/Blog_md_to_pdf - 码云 - 开源中国 (gitee.com) 回答重点 Java泛型的作用是通过在编译时检查类型安全&#xff0c;允许程序员编写更通用和…

如何永久解决Apache Struts文件上传漏洞

Apache Struts又双叒叕爆文件上传漏洞了。 自Apache Struts框架发布以来&#xff0c;就存在多个版本的漏洞&#xff0c;其中一些漏洞涉及到文件上传功能。这些漏洞可能允许攻击者通过构造特定的请求来绕过安全限制&#xff0c;从而上传恶意文件。虽然每次官方都发布补丁进行修…

重生之我在异世界学编程之C语言:深入动态内存管理收尾 + 柔性数组篇

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文常见的动态内存管理错误&#xf…

重温设计模式--观察者模式

文章目录 观察者模式&#xff08;Observer Pattern&#xff09;概述观察者模式UML图作用&#xff1a;实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题&#xff08;Subject&#xff09;&#xff1a;具体主题&#xff08;Concrete Subject&#xf…

python使用pip进行库的下载

前言 现如今有太多的python编译软件&#xff0c;其库的下载也是五花八门&#xff0c;但在作者看来&#xff0c;无论是哪种方法都是万变不离其宗&#xff0c;即pip下载。 pip是python的包管理工具&#xff0c;无论你是用的什么python软件&#xff0c;都可以用pip进行库的下载。 …

Apache Solr RCE(CVE-2017-12629)--vulhub

Apache Solr 远程命令执行漏洞&#xff08;CVE-2017-12629&#xff09; Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个…

apisix转发websocket

1、说明 apisix网关对接websocket&#xff0c;参数以及使用可以看官方文档 WebSocket Authentication | Apache APISIX -- Cloud-Native API Gateway 注意事项&#xff1a; &#xff08;1&#xff09;官方文档是websocket要加认证&#xff0c;但自测发现可以不加认证插件 …

【unity】【游戏开发】Unity项目一运行就蓝屏报Watch Dog Timeout

【背景】 由于是蓝屏所以没法截屏&#xff0c;总之今天遇到了一开Unity&#xff0c;过一阵就蓝屏的情况&#xff0c;报Watch Dog Timeout。 【分析】 通过任务管理器查看&#xff0c;发现Unity占用率100%&#xff0c;再观察Unity内部&#xff0c;每次右下角出现一个Global I…

【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用(2024/12/12补充)

最终效果 文章目录 最终效果更好的方式&#xff08;2024/12/12补充&#xff09;前言为什么使用CharacterControllerSimpleMove和Move如何选择&#xff1f;1. SimpleMove2. Move 配置CharacterController参数控制相机移动跳跃方式一方式二 下蹲处理下坡抖动问题实现奔跑和不同移…

sentinel学习笔记6-限流降级(上)

本文属于sentinel学习笔记系列。网上看到吴就业老师的专栏&#xff0c;写的好值得推荐&#xff0c;我整理的有所删减&#xff0c;推荐看原文。 https://blog.csdn.net/baidu_28523317/category_10400605.html sentinel 实现限流降级、熔断降级、黑白名单限流降级、系统自适应…

使用 UniApp 在微信小程序中实现 SSE 流式响应

概述 服务端发送事件&#xff08;Server-Sent Events, SSE&#xff09;是一种允许服务器向客户端推送实时更新的技术。SSE 提供了一种单向的通信通道&#xff0c;服务器可以持续地向客户端发送数据&#xff0c;而不需要客户端频繁发起请求。这对于需要实时更新的应用场景非常有…

监控易在汽车制造行业信息化运维中的应用案例

引言 随着汽车制造行业的数字化转型不断深入&#xff0c;信息化类IT软硬件设备的运行状态监控、故障告警、报表报告以及网络运行状态监控等成为了企业运维管理的关键环节。监控易作为一款全面、高效的信息化运维管理工具&#xff0c;在汽车制造行业中发挥着重要作用。本文将结合…