ds佇列 銀行單佇列多視窗模擬

2021-10-24 23:20:21 字數 1595 閱讀 1323

題目

假設銀行有k個視窗提供服務,視窗前設一條黃線,所有顧客按到達時間在黃線後排成一條長龍。當有視窗空閒時,下一位顧客即去該視窗處理事務。當有多個視窗可選擇時,假設顧客總是選擇編號最小的視窗。

本題要求輸出前來等待服務的n位顧客的平均等待時間、最長等待時間、最後完成時間。

輸入

輸入第1行給出正整數n(≤1000),為顧客總人數;隨後n行,每行給出一位顧客的到達時間t和事務處理時間p,並且假設輸入資料已經按到達時間先後排好了順序;最後一行給出正整數k(≤10),為開設的營業視窗數。

輸出

在一行中輸出平均等待時間(輸出到小數點後1位)、最長等待時間、最後完成時間,之間用1個空格分隔,行末不能有多餘空格。

樣例輸入

9

0 20

1 15

1 61

2 10

10 5

10 3

30 18

31 25

31 2

3

樣例輸出

6.2 17 62

思路

定義乙個佇列來存排隊的人

定義乙個優先佇列來存正在視窗處理業務的人,用優先佇列可以將最快處理完業務的人放到隊頭,此人業務完成時出隊,也就是顧客總選擇編號最小的視窗這個條件可以忽略,只要有空的視窗就入隊辦理業務。

話不多說,上**

#include

#include

#include

using

namespace std;

#define n 12

#define m 1002

struct node

;struct cmp};

intmain()

);}int k;

cin>>k;

int wait[m]=;

//記錄每個人的等待時間

int cnt=0;

//記錄此時的等待時間統計到哪個人

int now=0;

//當前時間

while

(!ren.

empty()

)else

//無空視窗

}while

(!q.

empty()

)//將剩下視窗的所有業務辦完

int sumwait=

0,maxwait=-1

;for

(int i=

0; i) cout

)<<

double

(sumwait*

1.0/n)

<<

" "<" "<}

DS佇列 銀行單佇列多視窗模擬

假設銀行有k個視窗提供服務,視窗前設一條黃線,所有顧客按到達時間在黃線後排成一條長龍。當有視窗空閒時,下一位顧客即去該視窗處理事務。當有多個視窗可選擇時,假設顧客總是選擇編號最小的視窗。本題要求輸出前來等待服務的n位顧客的平均等待時間 最長等待時間 最後完成時間。輸入第1行給出正整數n 1000 為...

銀行排隊問題之單佇列多視窗服務 (25 分)

假設銀行有k個視窗提供服務,視窗前設一條黃線,所有顧客按到達時間在黃線後排成一條長龍。當有視窗空閒時,下一位顧客即去該視窗處理事務。當有多個視窗可選擇時,假設顧客總是選擇編號最小的視窗。本題要求輸出前來等待服務的n位顧客的平均等待時間 最長等待時間 最後完成時間,並且統計每個視窗服務了多少名顧客。輸...

PTA 銀行排隊問題之單佇列多視窗服務 25分

假設銀行有k個視窗提供服務,視窗前設一條黃線,所有顧客按到達時間在黃線後排成一條長龍。當有視窗空閒時,下一位顧客即去該視窗處理事務。當有多個視窗可選擇時,假設顧客總是選擇編號最小的視窗。本題要求輸出前來等待服務的n位顧客的平均等待時間 最長等待時間 最後完成時間,並且統計每個視窗服務了多少名顧客。輸...