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

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

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

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

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

輸出 13排序

說明 首先,執行時長爲一、三、4的做業4(cpu1)、做業3(cpu2)、做業2(cpu3)進入處理。 1個時間單元后,做業4執行結束,做業1進入處理(cpu1); 3個時間單元后,做業3執行結束,做業5進入處理(cpu1); 4個時間單元后,做業2執行結束; 9個時間單元后,做業1執行結束; 13個時間單元后,做業5執行結束。 <br><br>隊列

1.思考內存

  • 首先,對做業的執行時常按照從小到大的順序進行排序;
  • 其次,記錄最後一個做業所在的服務器序號;
  • 最後,對該序號下執行的全部做業時長求和,即爲處理總時長。 <br><br>

2.實現 <br>ci

#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;
}
相關文章
相關標籤/搜索