牛客網-華為-2020屆校園招聘上機考試-3


題目描述
某多處理器多道批處理系統一次允許將多有作業調入內存,且能並行執行,其並行數等於處理器個數。該系統采用SJF的調度方式(最短作業優先,系統在調度時,總是有限調度執行處理時間最短的作業)。
現給定處理器個數m,作業數n,每個作業的處理時間分別為t1, t2...tn.
當n>m時,首先處理時間短的m個作業進入處理器處理,其他進入等待,當某個作業處理完成時,依次從等待隊列中取處理時間最短的作業進入處理。
求系統處理完所有作業的耗時為多少?
注:不考慮作業切換的消耗。

輸入描述:
輸入2行,第一行為2個整數(采用空格分隔),分別表示處理器個數m和作業數n;第二行輸入n個整數(采用空格分隔),表示每個作業的處理時長t1, t2...tn。0<m, n<100, 0<t1, t2...tn<100。

輸出描述:
輸出處理總時長

示例1
輸入
3 5
8 4 3 1 10

輸出
13

說明
首先,執行時長為1、3、4的作業4(cpu1)、作業3(cpu2)、作業2(cpu3)進入處理。
1個時間單元后,作業4執行結束,作業1進入處理(cpu1);
3個時間單元后,作業3執行結束,作業5進入處理(cpu1);
4個時間單元后,作業2執行結束;
9個時間單元后,作業1執行結束;
13個時間單元后,作業5執行結束。


1.思考

  • 首先,對作業的執行時常按照從小到大的順序進行排序;
  • 其次,記錄最后一個作業所在的服務器序號;
  • 最后,對該序號下執行的所有作業時長求和,即為處理總時長。


2.實現

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
	int m, n;

	while ( cin >> m >> n ){
		int input;
		vector<int> time;
		for (int i = 0; i < n; i++){
			cin >> input;
			time.push_back(input);
		}

		sort(time.begin(), time.end());

		int len = time.size();
		int index = len % m - 1;
		int res = 0;
		for (int i = index; i < len; i = i + 3){
			res += time[i];
		}

		cout << res << endl;
	}

	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM