多路归并问题+优先队列——UVALive-3135

Argus
Description:
多个有序表合并成一个有序表‘
譬如:
表1 : 1 3 5 7 9 11 13
表2:4 8 12 16
合并:1 3 4 5 7 8 9 11 12 13 16

思路:用优先队列维护每个表的当前元素,当前元素处理完,将这个元素的的下一个元素推进队列。

#include<stdio.h>
#include<iostream>
#include<cmath>
#include<math.h>
#include<string>
#include<string.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ms0(a) memset(a,0,sizeof(a))
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;

struct Node{
    int qNum,period,time;
    Node(int q, int p ,int t):qNum(q),period(p),time(t){}
    bool operator <(const Node& b) const{
        return time>b.time || (time==b.time && qNum>b.qNum);
    }
};

char cmd[20];
int qNum,period,k;
int main(){
    priority_queue<Node> que;
    while (scanf("%s",cmd)) {
        if(cmd[0]=='#')
            break;
        scanf("%d%d",&qNum,&period);
        que.push(Node(qNum,period,period));
    }
    scanf("%d",&k);
    while (k--) {
        Node a = que.top();
        que.pop();
        printf("%d\n",a.qNum);
        que.push(Node(a.qNum,a.period,a.time+a.period));
    }
    return 0;
}
发布了67 篇原创文章 · 获赞 0 · 访问量 1493

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/104611026