- 浏览: 155484 次
- 性别:
- 来自: 内蒙古
文章分类
最新评论
-
linest:
ethi_teye 写道id可能是0开头的,你用int保存再输 ...
pat-1022 Digital Library -
ethi_teye:
id可能是0开头的,你用int保存再输出,这些0就被忽略了。
pat-1022 Digital Library -
lixuanchong:
在lz的代码上稍作修改即可:
#include<iost ...
pat-1010* Radix -
air_sky:
确实。。result=a0*base^0+a1*base^1+ ...
pat-1010* Radix -
linest:
air_sky 写道
关于“方程只有一个正整数解,就可以用二分 ...
pat-1010* Radix
银行8点至17点开 有固定窗口数
来早了要等,没窗口要等,17点后才来就无视
求平均等待时间, 被无视的不统计
注意不是17点一定关门,只要是17点前来的都要服务,即使可能超时
下面代码完全模拟秒数,先排序顾客,滤掉17点后来的
对于每一秒,检查窗口的情况
总体思路是以时间为中心
网上看到下面代码,效率要高
采用优先队列,自动维护顺序,每次取最小
总体思路以顾客为中心
每次取出最近一个顾客,最近一个窗口
如果窗口时间大于顾客时间,则意味着顾客要等
如果顾客时间大于窗口时间,说明窗口空闲,用户来了即可,不用等,此时把用户的时间赋给窗口,相当于跳过了空闲时间
来早了要等,没窗口要等,17点后才来就无视
求平均等待时间, 被无视的不统计
注意不是17点一定关门,只要是17点前来的都要服务,即使可能超时
下面代码完全模拟秒数,先排序顾客,滤掉17点后来的
对于每一秒,检查窗口的情况
总体思路是以时间为中心
#include<iostream> using namespace std; #include<string> #include<vector> #include<stdio.h> #include<algorithm> #include<queue> struct Customer { int arrive; int cost; }; int time2int(string s) { int time = 0; int loc; int base = 3600; string tmp = s; for(int i=1;i<=3;i++) { loc = tmp.find(":"); time += atoi(tmp.substr(0,loc).c_str())*base; tmp = tmp.substr(loc+1); base /= 60; } return time; } string int2time(int time) { string s; char part[3]; for(int i=1;i<=3;i++) { sprintf(part,"%02d",time%60); s = string(part) + s; time /= 60; if(i!=3) s = ":"+s; } return s; } bool compare(Customer a,Customer b) { return a.arrive < b.arrive; } // care people come too early they must wait int main() { int N;//customer int K;//window vector<Customer> wait; vector<Customer> win; vector<Customer> tmp; string time; int need; int total = 0; int available; int allcus = 0; cin>>N; cin>>K; available = K; while(N--) { Customer c; cin>>time; c.arrive = time2int(time); cin>>need; c.cost = need * 60; if(c.arrive <= 17*3600) //eliminate customer coming too late { wait.push_back(c); allcus ++; } } sort(wait.begin(),wait.end(),compare); //serving time for(int t = 8*3600; !wait.empty() ;t++) { //may off at same time for(int i = 0;i<win.size();i++) { win[i].cost --; if(win[i].cost == 0) available++; //off window else tmp.push_back(win[i]); } win = tmp; tmp.clear(); //on window while(available > 0 && wait.size() > 0 && t >= wait[0].arrive) { win.push_back(wait[0]); available --; total += t - wait[0].arrive; //wait time for served customer wait.erase(wait.begin()); } } if(allcus == 0) printf("%.1f\n",0.0); else { double avg = total/(60.0*allcus); printf("%.1f\n",avg); } }
网上看到下面代码,效率要高
采用优先队列,自动维护顺序,每次取最小
总体思路以顾客为中心
每次取出最近一个顾客,最近一个窗口
如果窗口时间大于顾客时间,则意味着顾客要等
如果顾客时间大于窗口时间,说明窗口空闲,用户来了即可,不用等,此时把用户的时间赋给窗口,相当于跳过了空闲时间
#include<iostream> #include<iomanip> #include<queue> using namespace std; struct window { int mm; int hh; int ss; bool operator<(const window& a)const { if(hh>a.hh) return true; else if(hh==a.hh&&mm>a.mm) return true; else if(hh==a.hh&&mm==a.mm&&ss>a.ss) return true; else return false; } }; struct customer { int h; int m; int s; int last; bool operator<(const customer& a)const { if(h>a.h) return true; else if(h==a.h&&m>a.m) return true; else if(h==a.h&&m==a.m&&s>a.s) return true; else return false; } }; priority_queue<window> bank; priority_queue<customer> cu; int main() { int n,k,i; cin>>n>>k; window w; for(i=0;i<k;i++) { w.ss=0; w.mm=0; w.hh=8; bank.push(w); } customer cust; for(i=0;i<n;i++) { cin>>cust.h; getchar(); cin>>cust.m; getchar(); cin>>cust.s>>cust.last; cu.push(cust); } int c=0; double total=0; while(!cu.empty()) { cust=cu.top(); cu.pop(); if(cust.h>17||(cust.h==17&&cust.m)||(cust.h==17&&!cust.m&&cust.s)) break; c++; w=bank.top(); bank.pop(); if(cust.h<w.hh||(cust.h==w.hh&&cust.m<w.mm)||(cust.h==w.hh&&cust.m==w.mm&&cust.s<w.ss)) { total+=(w.hh-cust.h)*60.0+(w.mm-cust.m)+(w.ss-cust.s)/60.0; w.mm+=cust.last; w.hh+=w.mm/60; w.mm%=60; } else //have window but the customer not come yet so no need to wait { w.ss=cust.s; w.mm=cust.m+cust.last; w.hh=cust.h+w.mm/60; w.mm%=60; } bank.push(w); } cout<<fixed<<setprecision(1)<<total/c<<endl; return 0; }
发表评论
-
pat-1016 Phone Bills
2012-02-27 00:01 3150Sample Input:10 10 10 10 10 10 ... -
pat-1018 Public Bike Management 有问题
2012-02-26 19:55 3600最后一个case还过不了 == 为什么呢 思路dfs遍历到目 ... -
pat-1021* Deepest Root
2012-02-25 00:36 2764判断图是否都连接构成树,求使树高最大的根 实际上求图上两点间 ... -
pat-1022 Digital Library
2012-02-27 14:26 1815可能的查询 ID值进行map映射 以下代码有问题,原因 ... -
pat-1020* Tree Traversals
2012-02-23 15:20 1529给后序和中序遍历 求层序遍历 Sample Input:7 ... -
pat-1019 General Palindromic Number
2012-02-23 00:26 1095判断数字在给定进制下是否回文 并打出进制转换后系数 思路,将 ... -
pat-1026 Table Tennis
2012-02-19 19:19 0题意?? 多个桌可用 vip桌可用时 队中vip还是最小号 ... -
pat-1025 PAT Ranking
2012-02-19 15:45 1355不同地点一起排序 先组内排序,再全局排序 将小组添加进全局 ... -
pat-1024 Palindromic Number
2012-02-20 00:56 1998如果不是回文则进行逆序相加操作,打印出最后回文和操作次数 题 ... -
pat-1023 Have Fun with Numbers
2012-02-19 00:26 2566判断一个数乘2后是否是原数的一个排列 思路: int最大值 ... -
pat-1015 Reversible Primes
2011-09-28 20:08 1482将数字转成指定进制,再反序,判断原数和新数是否都是质数。 ... -
pat-1009 Product of Polynomials
2011-09-19 23:31 12161009:多项式乘积。 Sample Input 2 1 2 ... -
pat-1008 Elevator
2011-09-19 23:09 9421008: 电梯上升一层6秒,下降4秒,停留5秒。给出请求序列 ... -
pat-1007 Maximum Subsequence Sum
2011-09-19 22:59 15121007:连续和最大子串。 O(n)时间即可完成,不需存储空 ... -
pat-1006 Sign In and Sign Out
2011-09-18 23:35 14261006:给出进入和离开时间,求最早来和最晚走的人 Samp ... -
pat-1005 Spell It Right
2011-09-18 22:52 10991005:计算各个数字的和,并翻译成英文。 Sample I ... -
pat-1004* Counting Leaves
2011-09-18 22:35 17521004: 统计树的每一层上叶子节点的个数 Sample I ... -
pat-1010* Radix
2011-09-17 19:36 39541010: 给出两个数,已知一个数的进制,求是否可以在某进制下 ... -
pat-1014* Waiting in Line
2011-09-17 10:42 19271014: 排队服务问题,队列实现。 注意条件控制。 # ... -
pat-1012 The Best Rank
2011-09-16 23:58 19241012: 找出最佳排名 代码有点冗余。。。用了一些stl容 ...
相关推荐
- **queueing**:显示队列设置。 - **registry**:功能注册信息。 - **rhosts**:远程主机文件。 - **rif**:RIF存储器入口。 - **route-map**:路由器信息。 - **sdlle**:显示sdlc-llc2转换信息。 - **services**...
- **queueing**:显示队列信息。 - **registry**:显示注册表信息。 - **rhosts**:显示远程主机信息。 - **rif**:显示RIF信息。 - **route-map**:显示路由映射信息。 - **sdlle**:显示SDLC-LLC2转换信息。 - **...
- **单源流体流动分析(Fluid-flow Analysis of a Single Source – Per-VC Queueing)**:使用流体流动模型来分析单个源的队列行为。 - **多个相同类型的开关/关源(Multiple ON/OFF Sources of the Same Type)**:...
- **ALTQ_CBQ**:支持 CBQ(Class-Based Queueing)类基于队列调度算法。 - **ALTQ_RED**:支持 RED(Random Early Detection)随机早期检测机制。 - **ALTQ_RIO**:支持 RIO(Red-In/Red-Out)机制。 - **ALTQ_...
《Queueing Theory: A Linear Algebraic Approach》是一本深入探讨队列理论及其应用的重要著作,由莱斯特·利普斯基(Lester Lipsky)教授撰写。本书第二版在原有基础上进行了更新和完善,不仅适用于计算机科学与...
- **Queueing Toolbox**:MATLAB的一个工具箱,提供了多种排队模型的构建和分析功能。 - **模拟与仿真**:编写MATLAB代码模拟排队过程,可以调整参数观察系统性能的变化。 - **数据分析**:利用MATLAB进行数据...
**show queueing [fair|priority|custom]** - **功能**:查看接口上队列的设置和操作。 - **应用场景**:在优化网络流量时,确保流量分类和优先级处理符合预期。 ##### 2. **show queue e0/1** - **功能**:...
- **队列机制**:如PFIFO(Priority Fast Queue)、TBF(Token Bucket Filter)、SFQ(Stochastic Fair Queueing)等。 - **队列规定**:指定了如何处理不同类型的流量,包括优先级设置、限速等。 - **分类队列...
- **ARP_QUEUEING**: 支持ARP请求的排队。 - **ETHARP_TRUST_IP_MAC**: 表示是否信任接收到的IP/MAC绑定。 - **IP_FORWARD**: 开启或禁用IP数据包转发。 - **IP_OPTIONS_ALLOWED**: 允许IP选项。 - **IP_...
- **排队论**(Queueing Theory):研究服务系统中的等待和服务过程的数学理论,常用于分析排队现象,比如顾客到达和被服务的过程。 #### 标签:simulation kejian(模拟课件) - **教学目标**:本课件旨在帮助...
- VOQ(Virtual Output Queueing):虚拟输出队列机制,用于优化网络拥塞情况下的数据流控制。 - **应用场景**: - Clos网络适用于高密度、高流量的数据中心环境。 - VOQ有助于提高网络性能和稳定性。 #### 四...
- **PQS (Packet Queueing System)**:包排队系统,用于网络中的流量管理。 - **PBX (Private Branch Exchange)**:专用分组交换机,一种用于企业内部电话通信的交换设备。 - **T1**:一种提供1.544 Mbps带宽的数字...
- **排队论(Queueing Theory)及其应用**: 应用排队理论对系统性能进行分析和优化。 - **TCP Incast Congestion**: 针对TCP协议下的拥塞控制进行优化。 - **Pagestack**: 实现了页面堆栈机制以优化存储管理。 ### ...
38. **show queueing**: 显示队列设置。 39. **show registry**: 显示功能注册信息。 40. **show rhosts**: 显示远程主机文件信息。 41. **show rif**: 显示RIF(Routing Information Format)存储条目。 42. **show...
什么是消息队列(Message Queueing),使用消息队列有什么好处?** - **定义:** 消息队列是一种用于存储待处理消息的数据结构,可以跨进程、跨机器甚至跨网络传输。 - **好处:** - **解耦:** 允许生产者和消费...
- **VoQ (Voice Over Queueing)**:针对语音流量优化排队机制,减少延迟并提高语音质量。 - **HOLB (Head-of-Line Blocking)**:避免数据包在队列头部被阻塞的情况发生,提高网络效率。 - **RED (Random Early ...
20. **Pareto Improving Coordination Policies in Queueing Systems: Applications to Flow Control in Emergency Medical Services** - **演讲者**:Hung Tuan De - **内容概述**:该报告探讨了排队系统中的...