uva 1203

来源:互联网 发布:pc微信多开软件 编辑:程序博客网 时间:2024/06/06 02:53

这个题目大概意思是有一种触发器一样的东西,每次输入以后就算是激活了,每个响应周期就要返回这个数字,当有多个数字要在同一时间返回时,那就要输出最小的数字,那么其实每次都是取最优的问题,由于这些数据成一种线性排布,那么最优的话就应该想到可以用优先队列来维护这些数据,这也是题目的考查意向,那就是熟悉优先队列,具体的就看代码了,一定要学会优先队列的优先重载运算定义:

#include<stdio.h>#include<stdlib.h>#include<queue>using namespace std;//定义一个结构体类型struct Item{    int QNum;    int Period;    int Time; //当前时间     bool operator < (const Item&a) const{        return Time>a.Time||(Time==a.Time&&QNum>a.QNum); //时间大的先进栈后出栈,时间小的后进栈先出栈,时间相同就看数字了一样的道理     }       };int main(){    char s[20];    int k;    priority_queue <Item> pq;    while(scanf("%s",s)==1&&s[0]!='#'){         Item item;//表示有新的触发器          scanf(" %d %d",&item.QNum,&item.Period);         item.Time=item.Period;         pq.push(item);                                       }    scanf("%d",&k);    while(k--){        Item item=pq.top();        pq.pop();        printf("%d\n",item.QNum);        item.Time+=item.Period;        pq.push(item);    }     return 0;}