題目
假設銀行有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位顧客的平均等待時間 最長等待時間 最後完成時間,並且統計每個視窗服務了多少名顧客。輸...