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