离散事件模拟-银行管理——队列思想(双队列)

来源:互联网 发布:沧海一声笑 知乎 编辑:程序博客网 时间:2024/06/04 17:57

Think:
1知识点:队列+模拟
2反思:
1、心态反思:实训结束不久,心态松懈,基础知识方面多次犯错,分析问题不深入、不全面
2、知识点反思:基础知识不牢固,关于运算符优先级方面知识需要提高
运算符优先级——百度百科
3、错误反思:不同时刻窗口的人数不一定相等
3题目分析:双队列模拟银行的双窗口,注意平均逗留时间的计算

以下为Wrong Answer代码——不同时刻窗口的人数不一定相等

#include <bits/stdc++.h>using namespace std;struct node {    int Begin;    int End;}link_1, link_2;int tp1, tp2;int main(){    int T, n, i, x, y;    scanf("%d", &T);    while(T--){        scanf("%d", &n);        double sum = 0;        tp1 = tp2 = 0;        link_1.Begin = link_1.End = 0;        link_2.Begin = link_2.End = 0;        for(i = 0; i < n; i++){            scanf("%d %d", &x, &y);            if(x < 0 || x > 360){                continue;            }            if(tp1 <= tp2){                if(tp1 == 0){                    link_1.Begin = x;                    link_1.End = x + y;                }                else {                    if(x >= link_1.End){                        sum += (double)(link_1.End - link_1.Begin);                        link_1.Begin = x;                        link_1.End = x + y;                    }                    else {                        sum += (double)(link_1.End - link_1.Begin);                        sum += (double)(link_1.End - x);                        link_1.Begin = link_1.End;                        link_1.End += y;                    }                    tp1--;                }                tp1++;            }            else {                if(tp2 == 0){                    link_2.Begin = x;                    link_2.End = x + y;                }                else {                    if(x >= link_2.End){                        sum += (double)(link_2.End - link_2.Begin);                        link_2.Begin = x;                        link_2.End = x + y;                    }                    else {                        sum += (double)(link_2.End - link_2.Begin);                        sum += (double)(link_2.End - x);                        link_2.Begin = link_2.End;                        link_2.End += y;                    }                    tp2--;                }                tp2++;            }        }        sum += (double)(link_1.End - link_1.Begin);        sum += (double)(link_2.End - link_2.Begin);        printf("%.2lf\n", sum/(n));    }    return 0;}/***************************************************User name: Result: Wrong AnswerTake time: 0msTake Memory: 224KBSubmit time: 2017-07-13 20:34:04****************************************************/

以下为Accepted代码

#include <bits/stdc++.h>using namespace std;struct node {    int Begin;    int End;}link_1[104], link_2[104];int op1, op2, tp1, tp2;int main(){    int T, n, i, x, y;    scanf("%d", &T);    while(T--){        op1 = op2 = tp1 = tp2 = 0;        double sum = 0;        memset(link_1, 0, sizeof(link_1));        memset(link_2, 0, sizeof(link_2));        scanf("%d", &n);        for(i = 0; i < n; i++){            scanf("%d %d", &x, &y);            while(op1 < tp1 && x >= link_1[op1].End){                op1++;            }            while(op2 < tp2 && x >= link_2[op2].End){                op2++;            }            if(op1 == tp1){                link_1[tp1].Begin = x;                link_1[tp1].End = x + y;                tp1++;                sum += (double)(y);            }            else if(op2 == tp2){                link_2[tp2].Begin = x;                link_2[tp2].End = x + y;                tp2++;                sum += (double)(y);            }            else if((tp1 - op1) <= (tp2 - op2)){                link_1[tp1].Begin = link_1[tp1-1].End;                link_1[tp1].End = link_1[tp1-1].End + y;                sum += (double)(link_1[tp1].End - x);                tp1++;            }            else if((tp1 - op1) > (tp2 - op2)){                link_2[tp2].Begin = link_2[tp2-1].End;                link_2[tp2].End = link_2[tp2-1].End + y;                sum += (double)(link_2[tp2].End - x);                tp2++;            }        }        printf("%.2lf\n", sum/n);    }    return 0;}/***************************************************User name: Result: AcceptedTake time: 0msTake Memory: 228KBSubmit time: 2017-07-13 21:15:51****************************************************/
原创粉丝点击