• LA3135简单多路归并(优先队列)


    题意:
          有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;   
    }
              







  • 相关阅读:
    fedora20安装hadoop-2.5.1
    超简单fedora20(linux)下JDK1.8的安装
    解决A program file was not specified in the launch configuration.问题
    java中的四则运算
    spring util命名空间
    java中常用的数据加密算法
    C语言实现栈
    百度ueditor富文本编辑器的使用
    C#进程管理程序实现
    ABP领域层-仓储
  • 原文地址:https://www.cnblogs.com/csnd/p/12062565.html
Copyright © 2020-2023  润新知