UVA12100-列印佇列
阿新 • • 發佈:2019-02-13
題目大意:
現在有一個列印佇列,裡面的任務是無序的,每個任務有一個權值,印表機會從第一個任務開始執行,如果當前任務的權值是佇列中最大的,那麼就列印,否則就將該任務放置到隊末。每次列印消耗一定的時間,求該序列中的任務分別在什麼時候被列印。
這題開一個優先佇列一個普通佇列,佇列裡的元素出隊,如果出隊元素和優先佇列隊首元素相同就執行“列印”操作,否則就扔到隊尾。
#include <iostream> #include <string> #include <queue> using namespace std; int main() { int n; cin>>n; for(int i=0;i<n;i++) { int num, index; queue<int> q; priority_queue<int> pq; cin>>num>>index; for(int j=0;j<num;j++) { int rate; cin>>rate; pq.push(rate); q.push(rate); } int x = 0; while(true) { if(q.front()==pq.top()) { if(x==index) { cout<<num-q.size()+1<<endl; break; } else { q.pop(); pq.pop(); x++; } } else { int temp = q.front(); q.pop(); q.push(temp); if(x==index) { x=0; index=q.size()-1; } else { x++; } } } } return 0; }