现在银行已经很普遍,每个人总会去银行办理业务,一个好的银行是要考虑 平均逗留时间的,即: 在一定时间段内所有办理业务的人员逗留的时间的和/ 总的人数。逗留时间定义为 人员离开的时间减去人员来的时间。银行只有考虑了这一点,我们在办理业务的时候,才不会等太多的时间。
为了简化问题,我们认为银行只有一号窗口和二号窗口可以办理业务 ,并且在时间范围是12<=time<=18,即从中午十二点到晚上十八点,输入数据采用分钟即0代表中午12点,60代表下午一点,90代表下午一点半… 这样time>=0&&time<=360, 如果超出这个时间段概不接受,在这个时间段的一律接受。每个人到达的时间都不一样。顾客到达的时候,总是前往人数少的那个窗口。如果办业务的两个人进入离去发生在同一时间,则遵从先离去后进入。如果人数相当或者两个窗口都没有人总是前往1号窗口。请计算平均逗留时间=总逗留的分钟数/总的人数。
输入
第一行一个整数t(0<t<=100), 代表输入的组数
对于每一组输入一个整数n(0<n<=100),代表有n个人。然后是n行,每行有两个数据 x 与 y。 x代表顾客到达时间,y代表该顾客逗留时间。x y为整数(0=<x<=360)(y>0&&y<=15)。数据保证按顾客来的先后顺序输入。
输出
对于每组数据输出平均逗留时间,保留两位小数。
示例输入
1
1
60 10
示例输出
10.00
1 #include<stdio.h>
2 #include<
string.h>
3 #include<stdlib.h>
4
5 struct node
6 {
7 int x,y,t;
8 };
9
10 int cmp(
const void *a,
const void *
b)
11 {
12 struct node *c = (
struct node*
)a;
13 struct node *d = (
struct node*
)b;
14 if(c->x == d->
x)
15 return c->t-d->
t;
16 else return c->x-d->
x;
17 }
18
19 int main()
20 {
21 struct node lis[
110],que1[
110],que2[
110];
22 int t,n,e1,e2,x1,x2,sum;
23 int i ,j;
24 scanf(
"%d",&
t);
25 while(t--
)
26 {
27 e1 =
0; e2 =
0;sum =
0;
28 scanf(
"%d",&
n);
29 //lis[]存到达时间和逗留时间
30 //que1[]和que2[]存到达时间和结束时间
31 for( i =
0; i < n; i++
)
32 {
33 scanf(
"%d %d",&lis[i].x,&
lis[i].y);
34 lis[i].t =
i;
35 }
36 qsort(lis,n,
sizeof(lis[
0]),cmp);
37 for( i =
0; i < n; i++
)
38 {
39 x1 = -
1;
40 x2 = -
1;
41 //若1窗口没人
42 if(e1 ==
0)
43 {
44 que1[
0].x =
lis[i].x;
45 que1[
0].y = lis[i].x +
lis[i].y;
46 e1++
;
47 continue;
48 }
49 //若2窗口没人
50 else if(e2 ==
0)
51 {
52 que2[
0].x =
lis[i].x;
53 que2[
0].y = lis[i].x +
lis[i].y;
54 e2++
;
55 continue;
56 }
57 for(j =
0; j < e1; j++
)
58 {
59 if(lis[i].x >= que1[j].x && lis[i].x <
que1[j].y)
60 {
61 x1 = e1-
j;
62 break;
63 }
64 }
65 for(j =
0; j < e2; j++
)
66 {
67 if(lis[i].x >= que2[j].x && lis[i].x <
que2[j].y)
68 {
69 x2 = e2-
j;
70 break;
71 }
72 }
73 if(x1 == -
1)
74 {
75 que1[e1].x =
lis[i].x;
76 que1[e1].y = lis[i].x +
lis[i].y;
77 e1++
;
78 continue;
79 }
80 //若1窗口比2窗口的人多
81 if(x1 >
x2)
82 {
83 que2[e2].x =
lis[i].x;
84 if(que2[e2-
1].y >
lis[i].x)
85 que2[e2].y = que2[e2-
1].y+
lis[i].y;
86 else que2[e2].y = lis[i].x +
lis[i].y;
87 e2++
;
88 }
89 else
90 {
91 que1[e1].x =
lis[i].x;
92 que1[e1].y = que1[e1-
1].y+
lis[i].y;
93 e1++
;
94 }
95
96 }
97 for(i =
0; i < e1; i++
)
98 {
99 sum += que1[i].y-
que1[i].x;
100 }
101 for(i =
0; i < e2; i++
)
102 {
103 sum += que2[i].y -
que2[i].x;
104 }
105 printf(
"%.2lf\n",(sum*
1.0)/
n);
106 }
107 return 0;
108 }
View Code
转载于:https://www.cnblogs.com/LK1994/p/3221313.html
相关资源:银行 离散事件模拟