UVA 12100 Printer Queue
题意:求关注位置的元素被打印后,所花费的总时间。
思路:
用一个普通队列 p 和优先队列 pq 存优先级,因为优先队列队首肯定是要被打印的元素;
如果p,pq队首相等,表示可以打印,不然就丢到后面去。
1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<vector> 5 using namespace std; 6 7 8 int n; 9 int main() 10 { 11 cin >> n; 12 while (n--) 13 { 14 int m,pos; 15 cin >> m>>pos; 16 queue<int> q; 17 priority_queue<int>pq; 18 for (int i = 0; i < m; i++) 19 { 20 int level; 21 cin >> level; 22 q.push(level); 23 pq.push(level); 24 } 25 26 int cnt = 0,index=0;//花费的时间和当前的下标 27 while (true) 28 { 29 if (q.front() == pq.top())//当前优先级最高,可以打印 30 { 31 if (index == pos)//得到结果 32 { 33 cnt++; 34 cout << cnt << endl; 35 break; 36 } 37 else 38 { 39 cnt++; 40 q.pop(); 41 pq.pop(); 42 index++; 43 } 44 } 45 else//不等把当前扔到最后面 46 { 47 int cur = q.front(); 48 q.push(cur); 49 q.pop(); 50 if (index == pos) 51 { 52 pos = q.size() - 1; 53 index = 0; 54 } 55 else 56 { 57 index++; 58 } 59 } 60 } 61 } 62 return 0; 63 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步