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;   
    }
              







  • 相关阅读:
    mysql 远程登陆不上
    hdu 5339 Untitled【搜索】
    SqlServer 书目
    passwordauthentication yes
    oracle 11g RAC ocfs2
    Oracle 11g RAC database on ASM, ACFS or OCFS2
    CentOS ips bonding
    Oracle 11g RAC features
    openStack 王者归来之 trivial matters
    openstack windows 2008 img
  • 原文地址:https://www.cnblogs.com/csnd/p/12062564.html
Copyright © 2011-2022 走看看