UVA-11995(STL+模拟)附讲解
題目傳送門
題目大意
給一個“包”(某種數據結構)輸入一些數據,然后又從中取出一部分,根據這些數據判斷這個“包”是哪種數據結構,對應輸入"stack", “queue”, “priority queue”, “not sure”, “impossible”。
分析
這道題是一道簡單的模擬題,我們需要用STL中封裝好的棧、隊列和優先隊列對給出的數據進行模擬,輸出符合的即為要找的數據結構。這道題的坑點在于:它取出來的數的數量可能大于輸入的數量,如果對一個空的棧、隊列和優先隊列執行pop()操作會導致Runtime Error。
對應的STL簡介
1. 棧(stack)
棧是一種受限制的線性表,限定僅在表尾進行插入和刪除操作,遵循“后進先出”的原則。以下是STL中關于棧的常用操作函數:
2. 隊列(queue)
隊列也是一種受限制的線性表,限定只能在表頭進行刪除操作,在表尾進行插入操作,遵循“先進先出”原則。
3. 優先隊列(priority_queue)
在優先隊列中,元素被賦予優先級。當訪問元素時,具有最高優先級的元素最先刪除,遵循“最高級先出 (first in, largest out)”的原則,通常采用堆數據結構來實現。c++的STL中封裝的priority_queue默認是數值比較大的數具有較高的優先級,如果我們需要改變優先級的話可以通過以下方式:
priority_queue的一些常用函數:
#include<queue> priority_queue<int> pq; s.empty(); s.push((int)value); s.top(); //returns the top element of the heap s.pop();4.清空操作
關于以上STL容器的清空操作,很可惜他們并沒有像set和map擁有clear()這樣的清空函數,我們只能用類似于下面這種方法進行手動清空操作。
代碼如下
#include <iostream> #include <cstdio> #include <stack> #include <queue> #include <algorithm> using namespace std; stack<int> s; queue<int> q; priority_queue<int> pq; bool sflag,qflag,pqflag; int n,a,b; void init() //Initialization function {sflag =qflag = pqflag = true;while(!s.empty())s.pop();while(!q.empty())q.pop();while(!pq.empty())pq.pop(); } int main() {ios::sync_with_stdio(false);cin.tie();while(cin>>n){init();while(n--){cin>>a>>b;if(a == 1){if(sflag)s.push(b);if(qflag)q.push(b);if(pqflag)pq.push(b);}else{if(s.empty() || q.empty() || pq.empty())sflag =qflag = pqflag = false;if(sflag){if(s.top() != b)sflag = false;s.pop();}if(qflag){if(q.front() != b)qflag = false;q.pop();}if(pqflag){if(pq.top() != b)pqflag = false;pq.pop();}}}if(!sflag && !qflag && !pqflag)cout<<"impossible"<<endl;else if((sflag && qflag) || (sflag && pqflag) || (qflag && pqflag))cout<<"not sure"<<endl;else if(sflag)cout<<"stack"<<endl;else if(qflag)cout<<"queue"<<endl;elsecout<<"priority queue"<<endl;}return 0; }參考資料
https://blog.csdn.net/apro1066/article/details/81814154
https://blog.csdn.net/weixin_36888577/article/details/79937886
總結
以上是生活随笔為你收集整理的UVA-11995(STL+模拟)附讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P1525关押罪犯(并查集补集)
- 下一篇: URLEncoder和URLDecode