解题思路:STL —— stack, queue, priority_queue
1 /////////////////////////////////////////////////////////////////////////// 2 //problem_id: uva 11995 3 //user_id: SCNU20102200088 4 /////////////////////////////////////////////////////////////////////////// 5 6 #include <algorithm> 7 #include <iostream> 8 #include <iterator> 9 #include <iomanip> 10 #include <cstring> 11 #include <cstdlib> 12 #include <string> 13 #include <vector> 14 #include <cstdio> 15 #include <cctype> 16 #include <cmath> 17 #include <queue> 18 #include <stack> 19 #include <list> 20 #include <set> 21 #include <map> 22 using namespace std; 23 24 /////////////////////////////////////////////////////////////////////////// 25 #define lson l,m,rt<<1 26 #define rson m+1,r,rt<<1|1 27 /////////////////////////////////////////////////////////////////////////// 28 29 /////////////////////////////////////////////////////////////////////////// 30 const double EPS=1e-8; 31 const double PI=acos(-1.0); 32 33 const int x4[]={-1,0,1,0}; 34 const int y4[]={0,1,0,-1}; 35 const int x8[]={-1,-1,0,1,1,1,0,-1}; 36 const int y8[]={0,1,1,1,0,-1,-1,-1}; 37 /////////////////////////////////////////////////////////////////////////// 38 39 /////////////////////////////////////////////////////////////////////////// 40 typedef long long LL; 41 42 typedef int T; 43 T max(T a,T b){ return a>b? a:b; } 44 T min(T a,T b){ return a<b? a:b; } 45 T gcd(T a,T b){ return b==0? a:gcd(b,a%b); } 46 T lcm(T a,T b){ return a/gcd(a,b)*b; } 47 /////////////////////////////////////////////////////////////////////////// 48 49 /////////////////////////////////////////////////////////////////////////// 50 //Add Code: 51 /////////////////////////////////////////////////////////////////////////// 52 53 int main(){ 54 /////////////////////////////////////////////////////////////////////// 55 //Add Code: 56 int n,a,b; 57 while(scanf("%d",&n)!=EOF){ 58 bool is_stack=1,is_queue=1,is_priority_queue=1; 59 stack<int> s; 60 queue<int> q; 61 priority_queue<int> pq; 62 while(n--){ 63 scanf("%d%d",&a,&b); 64 if(a==1){ 65 if(is_stack) s.push(b); 66 if(is_queue) q.push(b); 67 if(is_priority_queue) pq.push(b); 68 } 69 else{ 70 if(is_stack){ 71 if(!s.empty() && s.top()==b) s.pop(); 72 else is_stack=0; 73 } 74 if(is_queue){ 75 if(!q.empty() && q.front()==b) q.pop(); 76 else is_queue=0; 77 } 78 if(is_priority_queue){ 79 if(!pq.empty() && pq.top()==b) pq.pop(); 80 else is_priority_queue=0; 81 } 82 } 83 } 84 int sum=(int)is_stack+(int)is_queue+(int)is_priority_queue; 85 if(sum==0) printf("impossible "); 86 else if(sum>=2) printf("not sure "); 87 else{ 88 if(is_stack) printf("stack "); 89 else if(is_queue) printf("queue "); 90 else printf("priority queue "); 91 } 92 } 93 /////////////////////////////////////////////////////////////////////// 94 return 0; 95 } 96 97 /////////////////////////////////////////////////////////////////////////// 98 /* 99 Testcase: 100 Input: 101 6 102 1 1 103 1 2 104 1 3 105 2 1 106 2 2 107 2 3 108 6 109 1 1 110 1 2 111 1 3 112 2 3 113 2 2 114 2 1 115 2 116 1 1 117 2 2 118 4 119 1 2 120 1 1 121 2 1 122 2 2 123 7 124 1 2 125 1 5 126 1 1 127 1 3 128 2 5 129 1 4 130 2 4 131 Output: 132 queue 133 not sure 134 impossible 135 stack 136 priority queue 137 */ 138 ///////////////////////////////////////////////////////////////////////////