离散事件模拟-银行管理
離散事件模擬-銀行管理
 Description
現在銀行已經很普遍,每個人總會去銀行辦理業務,一個好的銀行是要考慮 平均逗留時間的,即: 在一定時間段內所有辦理業務的人員逗留的時間的和/ 總的人數。逗留時間定義為 人員離開的時間減去人員來的時間。銀行只有考慮了這一點,我們在辦理業務的時候,才不會等太多的時間。
為了簡化問題,我們認為銀行只有一號窗口和二號窗口可以辦理業務 ,并且在時間范圍是12<=time<=18,即從中午十二點到晚上十八點,輸入數據采用分鐘即0代表中午12點,60代表下午一點,90代表下午一點半… 這樣time>=0&&time<=360, 如果來的時間超出這個時間段不接受(辦理時間不受限制)。每個人到達的時間都不一樣。顧客到達的時候,總是前往人數少的那個窗口。如果人數相當或者兩個窗口都沒有人總是前往1號窗口。請計算平均逗留時間=總逗留的分鐘數/總的人數。
Input
第一行一個整數t(0 < t <= 100), 代表輸入的組數。
對于每一組輸入一個整數n (0 < n <= 100),代表有n個人。然后是n行,每行有兩個數據 x 與 y。 x代表顧客到達時間,y代表辦理業務需要的時間。x, y 為整數(0 <= x <= 360)(y > 0 && y <= 15)。數據保證按顧客來的先后順序輸入。
Output
對于每組數據輸出平均逗留時間,保留兩位小數。
Sample
 Input
 1
 1
 60 10
 Output
 10.00
//這道題,自己看了幾遍還是沒做出了,參考了大佬的代碼,仍然還有些不明白,以后需復習。
#include<bits/stdc++.h>using namespace std;int main() {int n, m;int t1, t2;int d1, d2;double sum;cin>>n;while(n--){cin>>m;int k = m;//記錄一共有多少人d1 = d2 = 0;sum = 0;queue<int>q1, q2;while(m--){cin>>t1>>t2;while(!q1.empty() && q1.front() <= t1)q1.pop();while(!q2.empty() && q2.front() <= t1)q2.pop();if(q1.size() <= q2.size())//1窗口人少{if(t1 < d1)//如果現在這個人到的時間比上一個個人的離開的時間小d1 = d1 + t2;//現在這個人的離開時間就變成了上一個人的結束時間+現在這個人的業務用時elsed1 = t1 + t2;//sum = sum + (d1 - t1);//計算逗留時間q1.push(d1);}else{if(t1 < d2)d2 = t2 + d2;elsed2 = t2 + t1;sum = sum + (d2 - t1);q2.push(d2);}}printf("%.2lf\n", 1.0*sum/k);}return 0; }總結
以上是生活随笔為你收集整理的离散事件模拟-银行管理的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 树结构练习——排序二叉树的中序遍历
- 下一篇: 树-堆结构练习——合并果子之哈夫曼树
