最新华为OD机试真题-执行时长(100分)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员
✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解
👏 感谢大家的订阅➕ 和 喜欢💗
📎在线评测链接
🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~
🍓OJ题目截图
🌲 执行时长
问题描述
K小姐是一位资深的GPU程序员。为了充分发挥GPU的算力,她需要尽可能多地将任务交给GPU执行。假设每秒都会有新的任务到来,任务的数量存储在一个数组中,其中数组的第 个元素表示在第 秒新增的任务个数。
K小姐的GPU最多一次可以执行 个任务,每次执行耗时 秒。在保证GPU不空闲的情况下,K小姐想知道最少需要多长时间才能执行完所有任务。
输入格式
第一行包含一个正整数 ,表示GPU一次最多可以执行的任务个数,取值范围为 。
第二行包含一个正整数 ,表示任务数组的长度,取值范围为 。
第三行包含 个正整数,表示任务数组,其中第 个数字表示在第 秒新增的任务个数,取值范围为 。
输出格式
输出一个正整数,表示执行完所有任务最少需要的秒数。
样例输入 1
3
5
1 2 3 4 5
样例输出 1
6
样例输入 2
4
5
5 4 1 1 1
样例输出 2
5
数据范围
- 任务数组中的元素
题解
我们可以模拟整个过程。对于每一秒,如果新增任务数小于 ,那么GPU可以在当前秒内执行完所有新增任务。否则,GPU会在当前秒执行 个任务,剩余的任务需要在后续的秒数中执行。
具体做法是,我们用一个变量 记录剩余未执行的任务数。初始时 。对于每一秒,如果新增任务数 小于 ,我们将 重置为 。否则,我们将 增加 。最后,总的执行时间就是任务数组的长度 ,加上将剩余任务执行完所需的秒数 。
参考代码
- Python
n = int(input())
m = int(input())
tasks = list(map(int, input().split()))
remain = 0
for x in tasks:
if x < n:
remain = 0
else:
remain += x - n
print(m + (remain + n - 1) // n)
- Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] tasks = new int[m];
for (int i = 0; i < m; i++) {
tasks[i] = sc.nextInt();
}
int remain = 0;
for (int x : tasks) {
if (x < n) {
remain = 0;
} else {
remain += x - n;
}
}
System.out.println(m + (remain + n - 1) / n);
}
}
- Cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> tasks(m);
for (int i = 0; i < m; i++) {
cin >> tasks[i];
}
int remain = 0;
for (int x : tasks) {
if (x < n) {
remain = 0;
} else {
remain += x - n;
}
}
cout << m + (remain + n - 1) / n << endl;
return 0;
}
#华为##华为OD##春招##秋招##笔试#最新华为OD机试-D卷 文章被收录于专栏
本专栏给大家提供了华为2024最新华为OD-C/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 提供OJ在线评测