题意:
有N个任务,每个任务都有自己的时间间隔(就是每t秒请求执行一次)和任务id,这n个任务公用一个cpu,每次我们都执行时间靠前的,如果相同时间内有多个任务,就执行任务id小的,要求模拟出执行的前n个任务都是谁。
思路:
这个是不是就是操作系统里的FCFS算法啊!这个要模拟可以用优先队列去做,开一个结构体,有三个变量,一个是id,一个是时间间隔t,另一个是总时间st,每次取出都是按照a.st > b.st || a.st == b.st && a.id > b.id (这里是优先队列里的写法,不要误会) 一开始把所有的任务都进队列此时st=t,然后取出一个最小的作为第一个任务,然后把取出来这个的a.st+=a.t之后进队列,就这样反复执行,执行n次就行了,这个方法叫做多路归并问题,比较简单,而且容易想到和理解。
#include<queue>
#include<stdio.h>
using namespace std;
typedef struct NODE
{
int youxianji ,time ,_time;
friend bool operator < (NODE a ,NODE b)
{
return a.time > b.time || a.time == b.time && a.youxianji > b.youxianji;
}
}NODE;
NODE tou ,xin;
int main ()
{
char str[10];
int i ,k;
priority_queue<NODE>q;
while(scanf("%s" ,str) && str[0] != '#')
{
scanf("%d %d" ,&xin.youxianji ,&xin.time);
xin._time = xin.time;
q.push(xin);
}
scanf("%d" ,&k);
while(k--)
{
tou = q.top();
q.pop();
printf("%d
" ,tou.youxianji);
xin = tou;
xin.time += xin._time;
q.push(xin);
}
return 0;
}