【编程题目 |100分】流水线【2021, 2022 Q1,Q2 考试题】
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,
编码后请点击”保存并调试“按钮进行代码提交。
■ 题目描述
【流水线】
一个工厂有m条流水线,来并行完成n个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业。
现给定流水线个数m,需要完成的作业数n, 每个作业的处理时间分别为t1,t2…tn。请你编程计算处理完所有作业的耗时为多少?
当n>m时,首先处理时间短的m个作业进入流水线,其他的等待,当某个作业完成时,依次从剩余作业中取处理时间最短的进入处理。
输入描述
第一行为2个整数(采用空格分隔),分别表示流水线个数m和作业数n;
第二行输入n个整数(采用空格分隔),表示每个作业的处理时长t1,t2…tn。
0< m,n<100,0<t1,t2…tn<100。
注:保证输入都是合法的。
输出描述
输出处理完所有作业的总时长。
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3 5
8 4 3 2 10
输出
13
说明
1、先安排时间为2、3、4的3个作业。
2、第一条流水线先完成作业,然后调度剩余时间最短的作业8。
3、第二条流水线完成作业,然后调度剩余时间最短的作业10。
4、总工耗时就是第二条流水线完成作业的时间13(3+10)。
JAVA解法一
import java.util.Arrays; import java.util.Scanner; public class Pipeline { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); int[] time = new int[n]; for (int i = 0; i < n; i++) { time[i] = sc.nextInt(); } System.out.println(caculate(m, n, time)); }
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看JAVA解法二
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] input = sc.nextLine().split(" "); String[] job = sc.nextLine().split(" ");
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看Python
m, n = map(int, input().split()) workTimes = list(map(int, input().split()))
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看JavaScript
let input = readLine().split(" ").map(i=>parseInt(i)); let ints = readLine().split(" ").map(i=>parseInt(i));
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看