UVa 11995 I Can Guess the Data Structure!

做道水题凑凑题量,=_=||。

直接用STL里的queue、stack 和 priority_queue模拟就好了,看看取出的元素是否和输入中的相等,注意在此之前要判断一下是否非空。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 void scan( int &x )
 5 {
 6     char c;
 7     while( c = getchar(), c < '0' || c > '9' );
 8     x = c - '0';
 9     while( c = getchar(), c >= '0' && c <= '9' ) x = x*10 + c - '0';
10 }
11 
12 const int maxn = 1000 + 10;
13 int t[maxn], d[maxn];
14 
15 bool is_queue(int n)
16 {
17     queue<int> Q;
18     for(int i = 0; i < n; i++)
19     {
20         if(t[i] == 1) Q.push(d[i]);
21         else
22         {
23             if(Q.empty()) return false;
24             int x = Q.front(); Q.pop();
25             if(x != d[i]) return false;
26         }
27     }
28     return true;
29 }
30 
31 bool is_stack(int n)
32 {
33     stack<int> S;
34     for(int i = 0; i < n; i++)
35     {
36         if(t[i] == 1) S.push(d[i]);
37         else
38         {
39             if(S.empty()) return false;
40             int x = S.top(); S.pop();
41             if(x != d[i]) return false;
42         }
43     }
44     return true;
45 }
46 
47 bool is_p_queue(int n)
48 {
49     priority_queue<int> Q;
50     for(int i = 0; i < n; i++)
51     {
52         if(t[i] == 1) Q.push(d[i]);
53         else
54         {
55             if(Q.empty()) return false;
56             int x = Q.top(); Q.pop();
57             if(x != d[i]) return false;
58         }
59     }
60     return true;
61 }
62 
63 int main()
64 {
65     //freopen("in.txt", "r", stdin);
66 
67     int n;
68     while(scanf("%d", &n) == 1)
69     {
70         for(int i = 0; i < n; i++) { scan(t[i]); scan(d[i]); }
71         bool f1 = is_queue(n);
72         bool f2 = is_stack(n);
73         bool f3 = is_p_queue(n);
74         int cnt = (int)f1 + (int)f2 + (int)f3;
75         if(cnt > 1) puts("not sure");
76         else if(cnt == 0) puts("impossible");
77         else
78         {
79             if(f1) puts("queue");
80             if(f2) puts("stack");
81             if(f3) puts("priority queue");
82         }
83     }
84 
85     return 0;
86 }
代码君

 

posted @ 2015-03-15 15:57  AOQNRMGYXLMV  阅读(174)  评论(0编辑  收藏  举报