我是靠谱客的博主 尊敬小猫咪,最近开发中收集的这篇文章主要介绍【华为OD机试 c++实现】士兵过河【华为OD机试 2023 Q1考试题 A卷|200分】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

■ 题目描述

【士兵过河】

一支N个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河。

敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭。

现在军队只找到了1只小船,这船最多能同时坐上2个士兵。

1)当1个士兵划船过河,用时为 a[i];0 <= i < N

2)当2个士兵坐船同时划船过河时,用时为max(a[j],a[i])两士兵中用时最长的。

3)当2个士兵坐船1个士兵划船时,用时为 a[i]*10;a[i]为划船士兵用时。

4)如果士兵下河游泳,则会被湍急水流直接带走,算作死亡。

请帮忙给出一种解决方案,保证存活的士兵最多,且过河用时最短。

输入描述:

第一行:N 表示士兵数(0<N<1,000,000)

第二行:T 表示敌军到达时长(0 < T < 100,000,000)

第三行:a[0] a[1] … a[i]… a[N- 1]

a[i]表示每个士兵的过河时长。

(10 < a[i]< 100; 0<= i< N)

输出描述:

第一行:”最多存活士兵数” “最短用时”

示例1

输入

5

43

12 13 15 20 50

输出

3 40

说明

可以达到或小于43的一种方案:

第一步:a[0] a[1] 过河用时:13

第二步:a[0] 返回用时:12

第三步:a[0] a[2] 过河用时:15

示例2

输入

5

130

50 12 13 15 20

输出

5 128

说明

可以达到或小于130的一种方案:

第一步:a[1] a[2] 过河用时:13

第二步:a[1] 返回用时:12

第三步:a[0] a[5] 过河用时:50

第四步:a[2] 返回用时:13

第五步:a[1] a[2] 过河用时:13

第六步:a[1] 返回用时:12

第七步:a[1] a[3] 过河用时:15

所以输出为:

5 128

示例3

输入

7

171

25 12 13 15 20 35 20

输出

7 171

说明

可以达到或小于60的一种方案:

第一步:a[1] a[2] 过桥用时:13

第二步:a[1] 带火把返回用时:12

第三步:a[0] a[5] 过桥用时:35

第四步:a[2] 带火把返回用时:13

第五步:a[1] a[2] 过桥用时:13

第六步:a[1] 带火把返回用时:12

第七步:a[4] a[6] 过桥用时:20

第八步:a[2] 带火把返回用时:13

第九步:a[1] a[3] 过桥用时:15

第十步:a[1] 带火把返回用时:12

第十一步:a[1] a[2] 过桥用时:13

思路

代码

最后

以上就是尊敬小猫咪为你收集整理的【华为OD机试 c++实现】士兵过河【华为OD机试 2023 Q1考试题 A卷|200分】的全部内容,希望文章能够帮你解决【华为OD机试 c++实现】士兵过河【华为OD机试 2023 Q1考试题 A卷|200分】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部