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 }
代码君

 

你可能感兴趣的:(struct)