全新题目
【编程题目 |200分】士兵过河【华为OD机试 2023 Q1考试题 A卷】
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
语言限定:
C(clang11), C++(clang++11), Pascal(fpc 3.0.2), Java(javac 1.8), Python2(2.7.3),
PHP(7.4.7), C#(mcs5.4), ObjC(gcc 5.4), Pythen3(3.9), JavaScript Node(12.18.2), JavaScript V8(6.0.0),
Sqlite(3.7.9), R(4.0.3), Go(1.14.4), Ruby(2.7.1), Swift(5.3), matlab(Octave 5.2), Pypy2(pypy2.7.13),
Pypy3(pypy3.6.1), Rust(1.44), Scala(2.11.12), Kotlin(1.4.10), Groovy(3.0.6), TypeScript(4.1.2), Mysql(8.0)
本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,
编码后请点击”保存并调试“按钮进行代码提交。
■ 题目描述
【士兵过河】
一支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
所以输出为:
7 171
备注:
1)两个士兵的同时划船时,如果划速不同则会导致船原地转圈圈;所以为保持两个士兵划速相同,则需要向划的慢的士兵看齐。
2)两个士兵坐船时,重量增加吃水加深,水的阻力增大;同样的力量划船速度会变慢;
3)由于河水湍急大量的力用来抵消水流的阻力,所以2)中过河用时不是a[i] *2,
而是a[i] * 10。
代码实现
C
#include <stdio.h> #include <sys/types.h>
剩余50%内容,购买单篇文章或订阅会员后查看
此处内容需要权限查看
会员免费查看C++
#include<bits/stdc++.h> using namespace std; class Solution { public:
剩余50%内容,购买单篇文章或订阅会员后查看
此处内容需要权限查看
会员免费查看JAVA解法一
import java.util.*; public class Main { public static void main(String[] args) {
剩余50%内容,购买单篇文章或订阅会员后查看
此处内容需要权限查看
会员免费查看JAVA解法二
import java.util.*; public class Main { public static void main(String[] args) {
剩余50%内容,购买单篇文章或订阅会员后查看
此处内容需要权限查看
会员免费查看Python解法一
from typing import List class Solution: # 待实现函数,在此函数中填入答题代码
剩余50%内容,购买单篇文章或订阅会员后查看
此处内容需要权限查看
会员免费查看Python解法二
from typing import List class Solution: # 待实现函数,在此函数中填入答题代码
剩余50%内容,购买单篇文章或订阅会员后查看
此处内容需要权限查看
会员免费查看JavaScript
let strings = readLine().split(","); let errorSer = readLine().split(",");
剩余50%内容,购买单篇文章或订阅会员后查看
此处内容需要权限查看
会员免费查看