uva1203 ADT

来源:互联网 发布:财务战略矩阵eva 编辑:程序博客网 时间:2024/06/04 19:23

结构体+优先队列解决多路合并问题:将k个有序表合并成一个有序表。设共有n个元素,每个元素插入和取出一次,因此总复杂度O(n*logk)。


#include<cstdio>#include<queue>#include<string.h>using namespace std;struct Item{    int Qnum,Period,Time;    bool operator<(const Item& a) const{        return Time>a.Time||(Time==a.Time&&Qnum>a.Qnum);    }};int main(){    priority_queue<Item> pq;    char s[20];    //freopen("a.txt","r",stdin);    while(scanf("%s",s)&&s[0]!='#'){        Item item;        scanf("%d%d",&item.Qnum,&item.Period);        item.Time=item.Period;//初始化下一次入队的时间        pq.push(item);    }    int K;    scanf("%d",&K);    while(K--){        Item r=pq.top();//取下一个事件        pq.pop();        printf("%d\n",r.Qnum);        r.Time+=r.Period;//更新事件的发生时间        pq.push(r);    }    return 0;}



0 0