UVa 10901: Ferry Loading III 装上车子过河去
来源:互联网 发布:怎么才能让淘宝排名靠前 编辑:程序博客网 时间:2024/06/09 18:13
原题链接:UVa 10901: Ferry Loading III
题目大意:使用渡船运输汽车,给定渡船的最大载车数n、渡河所需时间t(来去时间相同)。只要河两岸有车在等待运输,船就进入工作状态,将船运至对岸。超出载量的车就等下次船靠岸的时候再进行运输,船初始停靠在左岸。若船靠岸时没有车处于等待运输状态,则船停留直到两岸之一有车抵达。需要注意的是,若船停靠在左岸,但右岸比左岸先有车来,则船要空着开到右岸去运输右岸的车,反之亦然。
大致思路:有车来,船就进入工作状态,没车来就等到有车来。
#include <climits>#include <string>#include <iostream>#include <queue>using namespace std;#define MAXM 10000int event[MAXM];bool side[MAXM];int times[MAXM];int main() {int c, n, t, m;cin >> c;while(c--) {cin >> n >> t >> m;for(int i = 0; i < m; i++) {string si;cin >> event[i] >> si;side[i] = si == "left";}queue<int> left, right, inBoat;bool inLeft = true;int arrivalTime = INT_MAX;int currEv = 0;while(currEv < m || arrivalTime != INT_MAX) {if(currEv != m && event[currEv] <= arrivalTime) {(side[currEv] ? left : right).push(currEv);if(arrivalTime == INT_MAX) arrivalTime = event[currEv];currEv++;} else {while(!inBoat.empty()) {times[inBoat.front()] = arrivalTime;inBoat.pop();}if(left.empty() && right.empty()) {arrivalTime = INT_MAX;} else {queue<int>& curr = inLeft ? left : right;while(!curr.empty() && (int) inBoat.size() < n) {inBoat.push(curr.front());curr.pop();}arrivalTime = arrivalTime + t;inLeft = !inLeft;}}}for(int i = 0; i < m; i++) cout << times[i] << endl;if(c) cout << endl;}return 0;}
代码分析: 使用三个数组分别存放:汽车抵达时间、抵达哪一边、最终到达对岸的时间。再用三个队列分别存放:左岸处于等待状态的汽车、右岸处于等待状态的汽车、处于运输状态的汽车。当船处于初始状态或空闲状态时,抵达时间arrivalTime都为INT_MAX,直到有车来再将其置为该车的抵达时间。状态变量inLeft用于判断当前船在左边还是右边。另外,37-46行代码为关键部分,意思是:若没有车处于等待状态,则船靠在当前岸等待;若有车在等,则不论当前停靠的岸上有没有车,船都要过河(若有车,则要运输,要过河;若无车,则对面有车在等,还是要过河)。
0 0
- UVa 10901: Ferry Loading III 装上车子过河去
- uva 10901 - Ferry Loading III(simulation)
- UVA 10901 Ferry Loading III 队列模拟
- Ferry Loading III
- uva 10440 Ferry Loading II
- uva 10440 Ferry Loading II
- UVa 10440 - Ferry Loading II
- hdu 1146 UVa10901 Ferry Loading III
- UVa Problem 10261 Ferry Loading (渡船装载)
- POJ 2336 Ferry Loading II(运车过河的最短时间和次数)
- Ferry Loading II
- ZOJ 1918 Ferry Loading II
- 【贪心】poj2336 ferry loading II
- hdu 3741 Ferry Loading V
- Ferry Loading II 贪心算法
- Sicily 1366. Ferry Loading IV
- poj 2336 Ferry Loading II
- Ferry Loading IV(队列)
- javascript_C3数据类型【中】
- 线程Thread总结
- strut1和strut2的区别
- ERROR: libvpx decoder version must be >=0.9.1
- 第二十三章:杨氏矩阵查找、排序、添加、删除
- UVa 10901: Ferry Loading III 装上车子过河去
- PHP学习笔记1 - MySQL免安装版配置
- DC、CDC及CDC的各个子类
- 【iOS练习】秒表练习
- 成为Android高手必须掌握的28大项内容和10个建议
- 如何使用搜索技巧来成为一名高效的程序员
- list详解
- Letter Combinations of a Phone Number
- js判断两个对象是否全等