現在銀行已經很普遍,每個人總會去銀行辦理業務,一個好的銀行是要考慮 平均逗留時間的,即: 在一定時間段內所有辦理業務的人員逗留的時間的和/ 總的人數。逗留時間定義為 人員離開的時間減去人員來的時間。銀行只有考慮了這一點,我們在辦理業務的時候,才不會等太多的時間。
為了簡化問題,我們認為銀行只有一號窗口和二號窗口可以辦理業務 ,并且在時間范圍是12<=time<=18,即從中午十二點到晚上十八點,輸入數據采用分鐘即0代表中午12點,60代表下午一點,90代表下午一點半… 這樣time>=0&&time<=360, 如果超出這個時間段概不接受,在這個時間段的一律接受。每個人到達的時間都不一樣。顧客到達的時候,總是前往人數少的那個窗口。如果辦業務的兩個人進入離去發生在同一時間,則遵從先離去后進入。如果人數相當或者兩個窗口都沒有人總是前往1號窗口。請計算平均逗留時間=總逗留的分鐘數/總的人數。 Input
第一行一個整數t(0
1160 10Example Output
10.00Hint
Author GYX
#include <iostream>#include <algorithm>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <bits/stdc++.h>#include <stack>#include <deque>#include <queue>using namespace std;int main(){ queue < int > p1; queue <int >p2; int t; scanf("%d", &t); while(t--) { while(!p1.empty()) { p1.pop(); } while(!p2.empty()) { p2.pop(); } int ans1=0, ans2=0;//分別表示隊列1, 2全部客戶完成需要到的時間 double sum=0;//記錄總的逗留時間 int n; int k; scanf("%d", &n); k=n; while(n--) { int i, j;//輸入的j如果更改說明為辦理業務需要花費的時間就容易理解了 scanf("%d%d", &i, &j); while(!p1.empty()&&p1.front()<=i)//判斷下一位客戶到來時隊列一和隊列二還剩多少人 { p1.pop(); } while(!p2.empty()&&p2.front()<=i) { p2.pop(); } if(p1.size()<=p2.size())//如果隊列一的人比隊列二的少 { if(ans1<=i)//如果當前沒有人在辦理業務,即不需要等待 { j+=i; } else j+=ans1;//如果需要等待 ans1=j;//將y改變為離開的時間 sum+=j-i; p1.push(j); } else//同理 { if(ans2<=i) { j+=i; } else j+=ans2; ans2=j; sum+=j-i; p2.push(j); } } printf("%.2lf/n", sum/k); } return 0;}新聞熱點
疑難解答