离散事件模拟-银行管理——队列思想(双队列)
来源:互联网 发布:沧海一声笑 知乎 编辑:程序博客网 时间: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****************************************************/
阅读全文
0 0
- 离散事件模拟-银行管理——队列思想(双队列)
- 离散事件模拟-银行管理 模拟,队列
- 离散事件模拟-银行管理 (队列模拟)
- 离散事件模拟-银行管理(队列)
- 队列->离散事件模拟-银行管理
- SDUTOJ 2087 离散事件模拟-银行管理(队列)
- SDUT 2087 离散事件模拟-银行管理(队列模拟)
- 离散事件模拟-银行管理(模拟题,队列)
- 离散事件模拟——银行队列问题//数据结构作业
- [SDUT](2087)离散事件模拟-银行管理 ---队列
- 队列-模拟离散事件
- 严蔚敏 数据结构C语言 银行排队队列 离散事件模拟
- 离散事件模拟-银行管理
- 离散事件模拟-银行管理
- 离散事件模拟-银行管理
- 离散事件模拟-银行管理
- 离散事件模拟-银行管理
- 离散事件模拟-银行管理
- 关于在android中使用webview 和js交互
- 分页组件——vue
- MySQL存储引擎MyISAM与InnoDB的优劣
- 浅谈机器学习——感知机
- HDFS用户权限检测
- 离散事件模拟-银行管理——队列思想(双队列)
- 选择排序
- 记毫无头绪之时
- 【JAVA】java图片处理类库Thumbnails使用教程,图片缩放、裁剪、旋转、压缩
- 最大公约数和最小公倍数的求解
- Linux
- boostrap-table插件分页展示表格数据
- CSDN日报20170713——《程序人生,终究是起承转合》
- Mongoose学习参考文档