按题意用priority_queue模拟即可

----------------------------------------------------------------------

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1009;
const int MOD = 10000;
struct Node {
int x, w, v;
bool operator < (const Node &o) const {
return v < o.v || (v == o.v && x > o.x);
}
};
priority_queue<Node> Q;
int cur;
void work(int x, int t, int w, int v, bool tag = true) {
if(!Q.empty()) {
while(!Q.empty()) {
Node o = Q.top();
if(t - cur >= o.w) {
cur += o.w;
printf("%d %d\n", o.x, cur);
Q.pop();
} else {
int _x = o.x, _w = o.w - t + cur, _v = o.v;
Q.pop();
Q.push((Node) {_x, _w, _v});
cur = t;
break;
}
}
if(Q.empty())
cur = t;
} else 
cur = t;
if(tag) Q.push((Node) {x, w, v});
}
int main() {
int x, t, w, v;
while(scanf("%d%d%d%d", &x, &t, &w, &v) == 4) work(x, t, w, v);
work(0, 1000000000, 0, 0, 0);
return 0;
}

----------------------------------------------------------------------

1216: [HNOI2003]操作系统

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 514  Solved: 280
[Submit][Status][Discuss]

Description

写一个程序来模拟操作系统的进程调度。假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的。其中运行优先级用自然数表示,数字越大,则优先级越高。如果一个进程到达的时候CPU是空闲的,则它会一直占用CPU直到该进程结束。除非在这个过程中,有一个比它优先级高的进程要运行。在这种情况下,这个新的(优先级更高的)进程会占用CPU,而老的只有等待。如果一个进程到达时,CPU正在处理一个比它优先级高或优先级相同的进程,则这个(新到达的)进程必须等待。一旦CPU空闲,如果此时有进程在等待,则选择优先级最高的先运行。如果有多个优先级最高的进程,则选择到达时间最早的。

Input

输入文件包含若干行,每一行有四个自然数(均不超过108),分别是进程号,到达时间,执行时间和优先级。不同进程有不同的编号,不会有两个相同优先级的进程同时到达。输入数据已经按到达时间从小到大排序。输入数据保证在任何时候,等待队列中的进程不超过15000个。

Output

按照进程结束的时间输出每个进程的进程号和结束时间

Sample Input

1 1 5 3
2 10 5 1
3 12 7 2
4 20 2 3
5 21 9 4
6 22 2 4
7 23 5 2
8 24 2 4

Sample Output

1 6
3 19
5 30
6 32
8 34
4 35
7 40
2 42

HINT

Source

最新文章

  1. linux git实现代理
  2. partnerv2.1
  3. bzoj1104: [POI2007]洪水pow
  4. csc一些命令简记
  5. java hashMap缓存简单实现
  6. 全文检索引擎Solr系列—–全文检索基本原理
  7. ☆RHEL6创建软raid的使用☆——经典之作
  8. Android程序的隐藏与退出
  9. 高级 JsRender 模板功能
  10. PHP 生成.csv 文件并下载到浏览器
  11. (简单) POJ 1562 Oil Deposits,BFS。
  12. 开blog
  13. python_5_模块
  14. Mysql之视图的操作
  15. Mac 系统占用100g的解决办法
  16. ul点击li,增加样式
  17. Python之路,第十八篇:Python入门与基础18
  18. C#装箱,拆箱和强制转换(转)
  19. 【python-opencv】19-Canny边缘检测
  20. RMQ板子

热门文章

  1. Windows10笔记本双显卡导致的启动黑屏解决办法之一
  2. The process &quot;E:\Qt\4.8.5\bin\qmake.exe&quot; exited with code 2.(不能包含中文路径,qmake够弱智的)
  3. 为什么webview.loadUrl(&quot;javascript:function() &quot;)不执行?
  4. Spring MVC遭遇checkbox的问题解决方式
  5. mysql 假设存在id则设数据自添加1 ,不存在则加入。java月份计算比較
  6. DevExpress ASP.NET 使用经验谈(3)-XPO对象的使用(使用指定数据连接)
  7. 通过SqlHelper实现登录
  8. JavaSE学习总结第21天_IO流3
  9. DLL运行时动态加加载的问题
  10. .NET中DLL“没有可放置在工具箱的组件”—FreeTextBox