蓝桥杯第1390题——A Careful Approach

题目描述

如果你认为参加一个编程比赛让你感到有压力,那么请你想象你是一个空中交通管制员。因为人命关天,所以一个空中交通管制员必须在时刻变化的环境中专注于任务,解决不可预知的事件。 让我们将目光转向飞机的着陆流程。飞机进入目的地飞航情报区之后,就会报告自己的位置、方向和速度,然后管制员就需要制定计划让所有飞机按指令安全着陆。一般来说,连续的两次着陆之间间隔时间越长,就越安全。因为这些额外的时间能够让工程师有机会对天气变化以及其他突发事件作出反应。 幸运的是,有一部分计划的制定可以自动化——这就是你来这里的原因。你会得到有关飞机着陆的脚本。每一个飞机都有一个安全着陆时间窗。你算出的指令必须要符合每个飞机的时间窗。另外,飞机的着陆时间点要尽量均匀,使得连续两次着陆的最小间隔尽量大。例如,如果三架飞机分别着陆于10:00am、10:05am、10:15am,那么最小间隔是五分钟,在头两架飞机之间。所有间隔不一定一样,但是最小的间隔要尽量大。

输入描述

多组数据。每个数据第一行为一个整数 n,为飞机架数。

接下来 n 行,每行两个整数 a[i],b[i] ,表示这架飞机只能在闭区间 [a[i],b[i]] 间降落。

a[i]和b[i]​的单位是分钟。输入的最后一行是一个零。

2≤n≤8, 0 ≤ a[i],b[i] ≤1440, 数据组数不大于 20​。

输出描述

对于每组数据,先输出第几组,然后输出最小间隔,单位为分和秒,舍入到最近的整数。格式参见样例。

输入输出样例

示例

输入

3
0 10 
5 15 
10 15 
2 
0 10 
10 20 
0

输出

Case 1: 7:30
Case 2: 20:00

解题思路

本题的解题思路是二分法,观察到n的范围是2至8,因此我们可以选择使用二分法配合dfs暴力搜索。(2023年蓝桥杯也有一个飞机起降问题,也是类似的数据范围,可以直接暴力。)题目有一句话让我们明显想到二分法策略——“最小间隔尽量大”。

具体的说,我们可以测试一个值mid,假设最小降落间隔是t,那么用dfs暴力测试所有飞机是否可以按最小间隔为t降落。

如果t的值非常小,几乎等同于无限制,因为只要大于等于t就可以了;如果t的值非常大,那么几乎就只能有一架飞机能降落,无法让所有飞机都降落。

到这里二分就明确了,从某一个值开始,其左值都能满足要求,其右值都不能满足要求。

对于测试一个t值是否满足要求,大的框架就是使用dfs,如果飞机没有降落,那么降落时间一定要在data[i][0]和data[i][1]之间,所以首先对理想中的最优降落时间——上一架飞机的降落时间+t,与目标飞机的最早降落时间取最大值,然后再与最晚降落时间取最小值。这样就选择到了满足最小间隔t的最早降落时间。

而本题还有一个坑点,就是关于单位的问题,首先它给的是分钟却要我们精确到秒,那我们当然是用秒来二分更好,因此我们首先将所有数据放大60倍变成秒,但这样做还是会导致通过率只有57.1%,原因是对于秒数量级还要进行四舍五入。

这里作者的做法是将所有数据再放大100倍,这样可以在不改变整数二分代码的情况下多计算两位有效值,最后我们再利用一点数据格式化技巧便能进行正确的四舍五入。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.math.BigInteger;
import java.util.*;public class Main {static int n;static int[][] data;static boolean[] visited;// time用于记录递归过程中当前时间,也是上一架飞机的降落时间static int time;public static void main(String[] args) throws IOException {Scanner sc = new Scanner(System.in);BufferedReader in = new BufferedReader(new InputStreamReader(System.in));//BufferedReader in = new BufferedReader(new FileReader("D:\\Downloads\\1390.in"));for (int t = 1; true; t++) {String[] temp = in.readLine().split(" ");n = Integer.parseInt(temp[0]);if (n == 0) {return;}data = new int[n][2];for (int i = 0; i < n; i++) {temp = in.readLine().split(" ");data[i][0] = Integer.parseInt(temp[0]) * 60 * 100;data[i][1] = Integer.parseInt(temp[1]) * 60 * 100;}int left = 0, right = 1440 * 60 * 100;// 在该二分结构下,right是目标答案,其值是100倍的秒while (left <= right) {int mid = left + (right - left) / 2;// 通过new的方式保证每次递归之前visited数组被重置visited = new boolean[n];// 将time定义为极小值,用于实现第一架飞机降落时间不受限time = Integer.MIN_VALUE;if (check(mid)) {left = mid + 1;} else {right = mid - 1;}}// 一些数据格式化转换技巧int ans = Integer.parseInt(String.format("%.0f", right / 100.0));System.out.printf("Case %d: %d:%02d\n", t, ans / 60, ans - ans / 60 * 60);}}public static boolean check(int t) {for (int i = 0; i < n; i++) {if (!visited[i] && time + t <= data[i][1]) {int temp = time;visited[i] = true;time = Math.min(Math.max(data[i][0], time + t), data[i][1]);if (check(t)) {return true;} else {time = temp;visited[i] = false;}}}// 如果测试完了所有飞机,还有没降落的,就说明该降落顺序失败,返回重新递归for (int i = 0; i < n; i++) {if (!visited[i]) {return false;}}return true;}
}

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

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

相关文章

人事档案转出需要注意哪些方面

人事档案转出是指将员工的人事档案从一个部门、公司或组织转移到另一个部门、公司或组织的过程。这个过程需要注意以下几个方面&#xff1a; 1.法律合规&#xff1a;在进行人事档案转出前&#xff0c;要确保遵守相关的法律法规和公司内部规定。例如&#xff0c;要确保有合法的授…

vue-lazyload 图片懒加载的原理与使用

一、图片懒加载vue-lazyload是什么&#xff1f; 背景&#xff1a; 图片是非常占用页面渲染时间的&#xff0c;尤其是一些图片比较多的页面&#xff0c;过多的图片可能会造成页面的卡顿&#xff0c;降低流畅度影响用户体验&#xff0c;我们在实际开发中&#xff0c;对于处于视口…

Redis 7.0版本主从复制机制

1、引言 Redis是一个开源、高性能、内存键值存储系统&#xff0c;同时也提供了数据结构服务器的功能。它支持五种主要的数据类型&#xff1a;字符串&#xff08;String&#xff09;、哈希表&#xff08;Hashes&#xff09;、列表&#xff08;Lists&#xff09;、集合&#xff…

【TEE】内存完整性保护

Hash Functions&Merkle Tree 对读操作进行完整性检查&#xff0c;通过在加载的块上重新计算一个哈希&#xff0c;然后根据片外地址将得到的哈希与片上哈希比较。 缺点&#xff1a;不可承受的片上存储开销&#xff0c;并假设128位哈希和512位cache line&#xff0c;其开销为…

LABEL-EFFICIENT SEMANTIC SEGMENTATION WITHDIFFUSION MODELS

基于扩散模型的标签高效语义分割 摘要&#xff1a; 去噪扩散概率模型最近受到了很多研究的关注&#xff0c;因为它们优于gan等替代方法&#xff0c;并且目前提供了最先进的生成性能。扩散模型的优越性能使其成为一些应用程序的吸引人的工具&#xff0c;包括绘图&#xff0c;超…

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程 前言 有开发过程序的朋友都清楚&#xff0c;后面开发是不需要再新建工程的&#xff0c;一般都是在初学时或者有特殊需要的时候才需要新建项目工程的。 后面开发都是可以在这种已有的工程上添加相关功能就行&#xff0c;只要前…

智能合约的编程语言

智能合约的编程语言 Solidity: https://learnblockchain.cn/docs/solidity/ 相关资料&#xff1a; https://guide.pseudoyu.com/docs/study_path/ 智能合约的技术栈 Hardhat https://hardhat.org/ Truffle https://trufflesuite.com/docs/truffle/ Remix https://hard…

基于openKylin与RISC-V的MindSpore AI项目实践

项目目标&#xff1a; 在openKylin系统上安装和配置MindSpore框架。开发一个简单的图像分类模型&#xff0c;并在RISC-V平台上进行训练和推理。根据RISC-V的特性&#xff0c;对MindSpore框架进行必要的优化。 目录 项目目标&#xff1a; 训练模型 编写训练代码&#xff0c;设…

外包干了3个月,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

Flutter App代码混淆

Flutter 应用混淆 Flutter 应用的混淆非常简单&#xff0c;只需要在构建 release 版应用时结合使用 --obfuscate 和 --split-debug-info 这两个参数即可。 flutter build apk –obfuscate --split-debug-info 命令需要指定输出调试文件的位置&#xff0c;该命令会生成一个符号映…

挑战给女神节送礼物,怎么寄快递才能快速的送到他手中呢?

马上就是三八女神节了&#xff0c;怎么样&#xff1f;你给心爱的她或者敬爱的她准备礼物了吗&#xff0c;如果已经准备好&#xff0c;你该怎么送给她呢&#xff1f;是当面送给她&#xff1f;还是通过快递打包送给她呢&#xff1f;这里推荐使用闪侠惠递寄快递发货给他吧&#xf…

SQL Server 阻止了对组件 ‘Ole Automation Procedures‘ 的 过程‘sys.sp_OACreate‘ 的访问

SQL Server 阻止了对组件 Ole Automation Procedures 的 过程sys.sp_OACreate 的访问&#xff0c;因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 Ole Automation Procedures。有关启用 Ole Automation Procedures 的详细信息&a…

防御-day6-内容安全()

一、文件过滤技术 这里说的文件过滤技术&#xff0c;是指针对文件的类型进行的过滤&#xff0c;而不是文件的内容。 想要实现这个效果&#xff0c;我们的设备必须识别出&#xff1a; 承载文件的应用 --- 承载文件的协议很多&#xff0c;所以需要先识别出协议以及应用。 文件传输…

【小白友好】LeetCode 删除并获得点数

基础题 打家劫舍https://leetcode.cn/problems/house-robber/ 小白解法 删除nums[i]就会使得所有nums[i]-1和nums[i]1的值都消失&#xff0c;手写了几个&#xff0c;发现找来找去不方便&#xff0c;还不如先排个序&#xff0c;然后这样nums[i]-1和nums[i]和nums[i]1就能靠在…

【Python】使用numpy进行神经网络激活函数算法描述

【Python】使用numpy进行神经网络激活函数算法描述 系统&#xff1a;macOS 10.14.5 IDE&#xff1a;PyCharm 2018.2.4 一、What 1.1 NumPy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库&#xff0c;支持大量的维度数组与矩阵运算&#xff0c;此外也针对数组运算提供…

基于灰狼算法GWO的城市三维无人机路径规划(复杂地形三维航迹路径规划)

摘要 本文提出了一种利用灰狼算法GWO来解决城市环境下无人机三维路径规划问题的方法。这种方法将复杂的无人机航迹规划任务转化为一个优化问题&#xff0c;然后运用灰狼算法GWO来解决这个优化问题。灰狼算法GWO是一种模拟灰狼种群捕猎行为的优化算法&#xff0c;它具备强大的全…

2024年第一届CS2major,新胶囊即将发行,需要提前做哪些布局

2024年第一届CS2major&#xff0c;将会在3月17日哥本哈根开始。 所以&#xff1a; 1、新的胶囊大概率会在3月10日左右发布。 2、网传战队挂坠&#xff0c;不知道是否会出现&#xff1f;&#xff08;原本出现过战队布章包&#xff0c;由于销量太差&#xff0c;第二届就取消了…

山人求道篇:八、模型的偏差与交易认知

原文引用https://mp.weixin.qq.com/s/xvxatVseHK62U7aUXS1B4g “ CTA策略一波亏完全年,除了交易执行错误导致的以外,这类策略都是多因子策略,一般会用机器学习组合多因子得出一个信号来进行交易。规则型策略几乎不会出现一波做反亏完全年的情况。这是有以下几个原因的: 多…

Crossover24新版发布!搭载Wine9提升Mac游戏体验!

2024年2月28日&#xff0c;著名的软件Crossover正式推出了2024年的首个全新版本Crossover24。Crossover 24版本的更新带来了许多功能优化和游戏优化&#xff0c;使用户能够更好地在Mac系统上运行各种软件和游戏&#xff0c;并且支持32位旧版软件的兼容运行。 Crossover24最新版…

Nodejs 第五十章(lua的基本使用)

lua基本使用 全局变量局部变量 全局变量是在全局作用域中定义的变量&#xff0c;可以在脚本的任何地方访问。全局变量在定义时不需要使用关键字&#xff0c;直接赋值即可。 xiaoman xmzsprint(xiaoman)局部变量是在特定作用域内定义的变量&#xff0c;只能在其所属的作用域…