sdut 2087 离散事件模拟-银行管理
離散事件模擬-銀行管理
Time Limit:?1000MS?Memory Limit:?65536KB Submit?Statistic?DiscussProblem 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
?
對于每組數據輸出平均逗留時間,保留兩位小數。
Example Input
1 1 60 10Example Output
10 http://blog.csdn.net/u014361775/article/details/41419205 #include <iostream> #include <queue> #include <stdio.h> using namespace std; int main() {int t,n;cin>>t;while(t--){queue<int>a0;queue<int>a1;int x,y,t0=0,t1=0;double sum=0.0;cin>>n;for(int i=0;i<n;++i){cin>>x>>y;if(0<=x&&x<=360){while(!a0.empty()&&a0.front()<=x)a0.pop();while(!a1.empty()&&a1.front()<=x)a1.pop();if(a0.size()<=a1.size()){if(x>=t0)t0=x+y;elset0=t0+y;a0.push(t0);sum+=t0-x;}else{if(x>=t1)t1=x+y;elset1+=y;a1.push(t1);sum+=t1-x;}}}printf("%.2lf\n",sum/n);}return 0; }總結
以上是生活随笔為你收集整理的sdut 2087 离散事件模拟-银行管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sdut 1479 数据结构实验之栈与队
- 下一篇: A Simple Math Proble