排隊「夾塞」是引起大家強烈不滿的行為,但是這種現象時常存在。在銀行的單視窗排隊問題中,假設銀行只有1個視窗提供服務,所有顧客按到達時間排成一條長龍。當視窗空閒時,下一位顧客即去該視窗處理事務。此時如果已知第i位顧客與排在後面的第j位顧客是好朋友,並且願意替朋友辦理事務的話,那麼第i位顧客的事務處理時間就是自己的事務加朋友的事務所耗時間的總和。在這種情況下,顧客的等待時間就可能被影響。假設所有人到達銀行時,若沒有空視窗,都會請求排在最前面的朋友幫忙(包括正在視窗接受服務的朋友);當有不止一位朋友請求某位顧客幫忙時,該顧客會根據自己朋友請求的順序來依次處理事務。試編寫程式模擬這種現象,並計算顧客的平均等待時間。
輸入格式:
輸入的第一行是兩個整數:1≤n≤10000,為顧客總數;0≤m≤100,為彼此不相交的朋友圈子個數。若m非0,則此後m行,每行先給出正整數2≤l≤100,代表該圈子裡朋友的總數,隨後給出該朋友圈裡的l位朋友的名字。名字由3個大寫英文本母組成,名字間用1個空格分隔。最後n行給出n位顧客的姓名、到達時間t和事務處理時間p(以分鐘為單位),之間用1個空格分隔。簡單起見,這裡假設顧客資訊是按照到達時間先後順序給出的(有並列時間的按照給出順序排隊),並且假設每個事務最多占用視窗服務60分鐘(如果超過則按60分鐘計算)。
輸出格式:
按顧客接受服務的順序輸出顧客名字,每個名字佔1行。最後一行輸出所有顧客的平均等待時間,保留到小數點後1位。
輸入樣例:
6 23 ann bob joe
2 jim zoe
jim 0 20
bob 0 15
ann 0 30
amy 0 2
zoe 1 61
joe 3 10
輸出樣例:
jimzoe
bobann
joeamy
75.2
#include
#include
using
namespace std;
int n,m;
/* * 構建圈子
* */
int cir1[
10005];
//每個圈子的人數
int cir11[
10005];
//打標記,
int cir22[
10005]=
;//打標記,就是看是否可以繼續讓下乙個人用
string que1[
10005];
//輸出的佇列
string s1[
105]
[105];
//第一次的圈子,也就是原聲圈子
string s2[
105]
[105];
//第二次輸出的圈子,就是儲存的結果
int cnt =
0,cnt1 =
0,cnt2 =0;
//備用計數器
int result =0;
//完成時間
double endtime =0;
/* * 構建個人
* */
struct personperson[
10005];
/* * 構建圈子的函式
* */
void
buildcir()
}}/* * find 函式
* */
intfind
(string name)}}
return-1
;}intmain()
//佇列輸入完畢
int que[
10005]=
;//打標記,看看那個備選了 /*這個位置坑慘我了,天啊,一定要注意資料的範圍啊*/
for(
int i =
0;i < n;i++
)else
for(
int j = i+
1;j < n;j++
)else}}
}else
if(person[i]
.cir ==-1
)else}}
for(
int i =
0;i < cnt;i++
)printf
("%.1lf\n"
,endtime/n)
;return0;
}
7 48 銀行排隊問題之單視窗「夾塞」版
排隊 夾塞 是引起大家強烈不滿的行為,但是這種現象時常存在。在銀行的單視窗排隊問題中,假設銀行只有1個視窗提供服務,所有顧客按到達時間排成一條長龍。當視窗空閒時,下一位顧客即去該視窗處理事務。此時如果已知第i位顧客與排在後面的第j位顧客是好朋友,並且願意替朋友辦理事務的話,那麼第i位顧客的事務處理時...
資料結構 銀行排隊問題之單視窗「夾塞」版
題目大意 排隊 夾塞 是引起大家強烈不滿的行為,但是這種現象時常存在。在銀行的單視窗排隊問題中,假設銀行只有1個視窗提供服務,所有顧客按到達時間排成一條長龍。當視窗空閒時,下一位顧客即去該視窗處理事務。此時如果已知第i位顧客與排在後面的第j位顧客是好朋友,並且願意替朋友辦理事務的話,那麼第i位顧客的...
銀行排隊問題之單視窗「夾塞」版 PTA資料與結構
7 4 銀行排隊問題之單視窗 夾塞 版 30 分 排隊 夾塞 是引起大家強烈不滿的行為,但是這種現象時常存在。在銀行的單視窗排隊問題中,假設銀行只有1個視窗提供服務,所有顧客按到達時間排成一條長龍。當視窗空閒時,下一位顧客即去該視窗處理事務。此時如果已知第 i位顧客與排在後面的第 j位顧客是好朋友,...