日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/6/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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\n" ,tou.youxianji);
? ? ? ?xin = tou;
? ? ? ?xin.time += xin._time;
? ? ? ?q.push(xin);
? ? }
? ? return 0; ??
}
? ? ? ? ??







總結

以上是生活随笔為你收集整理的LA3135简单多路归并(优先队列)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。