UVa 12100 - Printer Queue【队列和优先队列】

来源:互联网 发布:知乎女性精神洁癖 编辑:程序博客网 时间:2024/05/06 08:53

原题网址:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=836&page=show_problem&problem=3252


题目说的是,有一些打印任务,每次只打印这些中最重要的,如果当前任务不是最重要的,就放在队尾,现在指定某一位置的一个任务,问什么时候把指定任务打印完成(打印每个需要 1 )

题解:

用的优先队列判断是否是最大的那个值,其实不需要优先队列,只是顺手了而已,然后注意标记上自己的任务,无脑循环模拟。


#include<stdio.h>#include<string.h>#include<queue>using namespace std;struct node{int val,kase;bool friend operator < (node a,node b){return a.val<b.val; }};int main(){int t,n,m;//freopen("shuju.txt","r",stdin);scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);priority_queue<node> pq;queue<node> q;int val,kase;for(int i=0;i<n;++i){scanf("%d",&val);kase=(m==i)?1:0;node tp={val,kase};pq.push(tp);q.push(tp);}int time=0;while(1){node a=pq.top(),b=q.front();while(a.val!=b.val){q.push(b);q.pop();a=pq.top(),b=q.front();}++time;pq.pop();q.pop();if(b.kase==1){printf("%d\n",time);break;} }}return 0;} 





0 0
原创粉丝点击