国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

1017. Queueing at Bank 解析

2019-11-14 12:38:28
字體:
來源:轉載
供稿:網(wǎng)友

注意:后面來的顧客是有可能不用排隊的。 比如11:00顧客沒有了13:00來人了是不用排隊的。

在選取窗口的時候方法和之前那個1014的選擇方法不同。注意對比。

#include <iostream>#include <vector>#include <algorithm>#include <string>#include <map>#include <queue>using namespace std;struct Node{	string time;	int p;};int char2int(char c) {	return int(c) - int('0');}int str2int(string s) {	return (char2int(s[0]) * 10 + char2int(s[1])) * 3600 + (char2int(s[3]) * 10 + char2int(s[4])) * 60 + (char2int(s[6]) * 10 + char2int(s[7]));}bool cmp(Node N1, Node N2) {	if (str2int(N1.time) < str2int(N2.time))		return true;	return false;}int FindWin(queue <Node> * window, int K) { //找最優(yōu)窗口	int minI = 0;	int minSize = window[0].size();	for (int i = 0; i < K; i++) {		if (minSize > window[i].size()) {			minSize = window[i].size();			minI = i;		}	}	return minI;}int DeWin(queue <Node> * window, int K) { //窗口出隊	int minI = 0;	int minTime = window[0].front().p;	for (int i = 0; i < K; i++) {		if (minTime > window[i].front().p) {			minTime = window[i].front().p;			minI = i;		}	}	for (int i = 0; i < K; i++) { //出隊		if (minTime == window[i].front().p)			window[i].pop();	}	return minI;}int main( ){	int N, K;	cin >> N >> K;			vector <Node> tempNV;	Node tempN;		int TrueNum = 0;	for (int i = 0; i < N; i++) {		cin >> tempN.time >> tempN.p;		if (str2int(tempN.time) <= 17 * 3600) {			TrueNum++;			if (tempN.p > 60)				tempN.p = 60;			tempNV.push_back(tempN);		}			}	N = TrueNum;	Node * List = new Node[N];	for (int i = 0; i < N; i++) {		List[i] = tempNV[i];	}		sort(List, List + N, cmp);	int * time = new int[N];//服務時間	int * winTime = new int[K];//窗口計時	int startTime = 8 * 3600; //開始時間	int endTime = 17 * 3600 ; //結束時間	int Num = 0;	for (int i = 0; i < K; i++) {		winTime[i] = startTime;	}				int SumWait = 0; //等待總時間	int tempWin = 0; //選擇窗口		queue <Node> * window = new queue<Node>[K];	for (int i = 0; i < N; i++) {		time[i] = str2int(List[i].time); //到達時間		//tempWin = FindWin(window, K);		//if (window[tempWin].size() < 1) {		//	window[tempWin].push(List[i]);		//}		//else {		//	tempWin = DeWin(window, K);		//	window[tempWin].push(List[i]);		//}		int Min = winTime[0];		tempWin = 0;		for (int i = 0; i < K; i++) {			//cout << winTime[i] << " ";			if (Min > winTime[i]) {				Min = winTime[i];				tempWin = i;			}		}		//cout << endl;		//cout << tempWin << endl;						if (winTime[tempWin] <= time[i]) {//窗口上次服務結束時間小于到達時間 無需等待			winTime[tempWin] = time[i] + List[i].p * 60;		}		else{ //需要等待			SumWait += (winTime[tempWin] - time[i]);			winTime[tempWin] += List[i].p * 60;		}		//cout << "win = " << tempWin << endl;		//cout << List[i].time << " " << List[i].p << endl;		//cout << "WIN: " << winTime[tempWin] << " Arrive:" << time[i] << endl;		//cout << SumWait << endl;		//cout << endl;	}//	cout << SumWait << endl;	if (N <= 0) cout << "0.0" << endl;	else {		float average = SumWait / 60.0 / TrueNum;		PRintf("%.1f", average);		cout << endl;	}	return 0;}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 罗源县| 南华县| 湘阴县| 家居| 本溪市| 辛集市| 陵川县| 大厂| 山西省| 山东省| 通化县| 萍乡市| 浪卡子县| 菏泽市| 威信县| 临颍县| 西充县| 卢氏县| 昭苏县| 遵义市| 于田县| 合山市| 林西县| 武穴市| 阳泉市| 牡丹江市| 渭源县| 柳河县| 濉溪县| 桃江县| 民乐县| 普洱| 九寨沟县| 巫山县| 建始县| 界首市| 迁西县| 罗定市| 建水县| 西和县| 乐至县|