1. 程式人生 > >UVA 11995 (STL_E題)解題報告

UVA 11995 (STL_E題)解題報告

esp pri 題目 close 判斷 結構 uva spa div

題目鏈接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3146

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

題意:有一種名叫包的數據類型,要求通過輸入輸出情況判斷是哪種數據類型。

思路:模擬題,將三種數據類型模擬出來,按照操作進行模擬。如果出現不符合的情況,標記出來,最後通過標記分析出來可能的數據結構。

註意:要註意不同情況的初始化,或者將數據類型定義在每種情況的局部。

代碼:

技術分享圖片
#include<cstdio>
#include<stack>
#include<queue>

using namespace std;
int n;

int main(void){
    
    while(~scanf("%d",&n)){
        int flag[3]={0};
        stack<int> s;
        queue
<int> q; priority_queue<int> pq; for(int i =0;i<n;i++){ int a =0;int b =0; scanf("%d %d",&a,&b); if(a ==1){ s.push(b); q.push(b); pq.push(b); }else {
if(!s.empty()) { if(s.top() != b) flag[0] = 1; s.pop(); } else flag[0] = 1; if(!q.empty()) { if(q.front() != b) flag[1] = 1; q.pop(); } else flag[1] = 1; if(!pq.empty()) { if(pq.top() != b) flag[2] = 1; pq.pop(); } else flag[2] = 1; } } int count = 0; for(int i =0;i<3;i++){ count+=flag[i]; } if(count ==3) printf("impossible\n"); else if(count<2) printf("not sure\n"); else if(flag[0]==0) printf("stack\n"); else if(flag[1]==0) printf("queue\n"); else if(flag[2]==0) printf("priority queue\n"); } return 0; }
View Code

UVA 11995 (STL_E題)解題報告