1 条题解
-
0
题意+思路: 对于每一个时间结点,只有可能做以下的事: 1.刚做完一个任务 输出进程号和目前的时间 当队列里有任务:找到队列里优先级最大的,进入case3 队列没有任务:进入下一个任务的时间,进入case2
2.等待新任务 停止正在进行的任务,将新的任务放进队列,取出队列里优先级最大的,进入case3
3.正开始做一件任务 若在下一个任务之前能做完:当前时间加上此任务需要的时间,把此任务弹出队列,进入case1 若无法在下一个任务之前做完任务:时间减去最多能做的时间,当前时间也同样加上这么多,进入case1
参考代码
//输入+初始化 while (cin >> a[n+1].id >> a[n+1].st >> a[n+1].t >> a[n+1].p) n++; a[n+1].t = 0x7fffffff;
//处理过程 for (int i = 1; i <= n; i++) { q.push(a[i]); now = a[i].st; while (!q.empty() && now < a[i+1].st && sum < n) { jc temp = q.top(); q.pop(); int x = min(temp.t,a[i+1].st-now); temp.t -= x; now +=x ; if (!temp.t) { cout << temp.id << " " << now << endl; sum++; } else q.push(temp); } }
- 1
信息
- ID
- 717
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 44
- 已通过
- 11
- 上传者