每日一题(4)

有一只蜗牛位于二维坐标系的原点(0,0),在x轴上有n根平行于y轴的竹竿,它们底部的纵坐标为0,横坐标分别为x_1,x_2,\cdots,x_n。蜗牛想要从原点走到第n根竹竿的底部(x_n,0)。蜗牛在x轴上的移动速度是1单位每秒,在竹竿上向上爬的速度是0.7单位每秒,向下爬的速度是1.3单位每秒。此外,蜗牛可以在第i根竹竿的高度为a_i的位置(x_i,a_i)瞬间传送到第i + 1根竹竿的高度为b_{i+1}的位置(x_{i+1},b_{i+1})(0 < i < n)。

输入格式

  1. 第一行是一个正整数n。

  2. 第二行是n个正整数x_1,x_2,\cdots,x_n。

  3. 后面n-1行,每行两个正整数a_i,b_{i+1}。

输出格式

输出一行,一个浮点数表示蜗牛到达目的地所需的最少时间(四舍五入保留两位小数)。

样例输入

plaintext

3

1 10 11

1 1

2 1

import java.util.Scanner;

public class SnailPath {

public static void main(String\[\] args) {

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();

int\[\] x = new intn;

for (int i = 0; i < n; i++) {

xi = scanner.nextInt();

}

int\[\]\[\] ab = new intn - 12;

for (int i = 0; i < n - 1; i++) {

abi0 = scanner.nextInt();

abi1 = scanner.nextInt();

}

double minTime = Double.MAX_VALUE;

for (int state = 0; state < (1 << (n - 1)); state++) {

double time = 0;

int pos = 0;

int height = 0;

for (int i = 0; i < n - 1; i++) {

if ((state & (1 << i))!= 0) {

// 使用传送门

if (height!= 0) {

time += (double) height / 0.7;

}

time += 0;

height = abi1;

} else {

// 不使用传送门

if (height!= 0) {

time += (double) height / 0.7;

}

height = 0;

time += (double) (xi + 1 - xi);

}

}

if (height!= 0) {

time += (double) height / 0.7;

}

time += (double) xn - 1;

if (time < minTime) {

minTime = time;

}

}

System.out.printf("%.2f", minTime);

}

}

解题思路

  1. 初始化:
  • 首先读取输入的n,竹竿的横坐标数组x,以及每对传送门的高度a和b。

  • 初始化一个变量 min_time 为一个较大的值,用于记录最小时间。

  1. 计算时间:
  • 对于每一种可能的路径,计算蜗牛从原点到达第n根竹竿底部所需的时间。

  • 路径可以分为以下几种情况:

  • 蜗牛一直沿着x轴爬行,不使用任何传送门。这种情况下,时间为x_n。

  • 蜗牛使用部分传送门。在这种情况下,需要考虑每一种可能的传送门组合。

  • 对于每一对相邻的竹竿i和i+1,计算以下两种情况的时间:

  • 从x_i沿着x轴爬行到x_{i+1}的时间,即x_{i+1}-x_i。

  • 从x_i处的高度a_i传送到x_{i+1}处的高度b_{i+1},然后计算在竹竿上移动的时间。在竹竿上向上爬的时间为a_i/0.7,向下爬的时间为b_{i+1}/1.3,传送时间为0(瞬间传送)。

  • 选择时间最短的路径。

  1. 更新最小时间:
  • 对于每一种可能的路径,计算出时间后,更新 min_time 为较小的值。
  1. 输出结果:
  • 最后输出 min_time ,四舍五入保留两位小数。

还是不太理解o-0

相关推荐
J2虾虾8 分钟前
C语言 typedef 用法
c语言·数据结构·算法
程序员小羊!12 分钟前
12.Java 多线程编程
java·开发语言
hunterkkk(c++)16 分钟前
线段树例题
算法
xuhaoyu_cpp_java18 分钟前
项目学习(三)代码生成器
java·经验分享·笔记·学习
乐观勇敢坚强的老彭18 分钟前
C++信息学奥赛lesson1
java·开发语言·c++
San813_LDD23 分钟前
[深度学习] 数据序列化格式对比:以日志级别配置为例
xml·java·前端
故渊at27 分钟前
第二板块:Android 四大组件标准化学理 | 第七篇:Activity 页面载体与任务栈算法
android·算法·生命周期·activity·任务栈
github_czy27 分钟前
更加优雅的类型检查与传参---mcp源码分析
java·服务器·开发语言
专注_每天进步一点点32 分钟前
IDEA中,Apifox Helper 的 2.0.15-243版本的插件 导出指定的接口,入参的中文名为空,描述为空
java·ide·intellij-idea
兰令水34 分钟前
leecodecode【区间DP+树形DP】【2026.6.10打卡-java版本】
java·算法·leetcode