zoukankan      html  css  js  c++  java
  • 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;   
    }
              







  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/csnd/p/12062564.html
Copyright © 2011-2022 走看看