UVA 11995 I Can Guess the Data Structure! (STL应用)
Input
There are several test cases. Each test case begins with a line containing a single integer n (1 n
1000). Each of the next n lines is either a type-1 command, or an integer 2 followed by an integer x.
That means after executing a type-2 command, we get an element x without error. The value of x
is always a positive integer not larger than 100. The input is terminated by end-of-le (EOF).
Output
For each test case, output one of the following:
stack It's denitely a stack.
queue It's denitely a queue.
priority queue It's denitely a priority queue.
impossible It can't be a stack, a queue or a priority queue.
not sure It can be more than one of the three data structures men-
tioned above.
Sample Input
6
1 1
1 2
1 3
2 1
2 2
2 3
6
1 1
1 2
1 3
2 3
2 2
2 1
2
1 1
2 2
4
1 2
1 1
2 1
2 2
7
1 2
1 5
1 1
1 3
2 5
1 4
2 4
Sample Output
queue
not sure
impossible
stack
priority queue
题目大意:
就是说,给你一些操作,1 x表示把x放入到某种数据结构当中,2 x表示取出来他最前面的元素是x,问你这些操作过后,你能不能猜出来他是哪种数据结构?
解题思路:
水题,直接模拟就好了。
注意复习简单的STL,注意stack的push,pop queue的push,pop priority_queue的push和pop,
stack s.top,
queue s.front
priority_queue s.top
代码:
# include<cstdio> # include<iostream> # include<stack> # include<queue> using namespace std; # define MAX 100004 int n; int a[MAX],t[MAX]; int check_stack() { stack<int>s; for ( int i = 0;i < n;i++ ) { if (t[i]==2) { if (s.empty()) return 0; int x = s.top(); s.pop(); if ( x!=a[i] ) return 0; } else s.push(a[i]); } return 1; } int check_queue() { queue<int>Q; for ( int i = 0;i < n;i++ ) { if ( t[i]==2 ) { if (Q.empty()) return 0; int x = Q.front(); Q.pop(); if ( x!=a[i] ) return 0; } else Q.push(a[i]); } return 1; } int check_pq() { priority_queue<int>PQ; for ( int i = 0;i < n;i++ ) { if ( t[i]==2 ) { if (PQ.empty()) return 0; int x = PQ.top(); PQ.pop(); if (x!=a[i]) return 0; } else PQ.push(a[i]); } return 1; } int main(void) { while ( scanf("%d",&n)!=EOF ) { for ( int i = 0;i < n;i++ ) scanf("%d%d",&t[i],&a[i]); int cnt1 = check_stack(); int cnt2 = check_queue(); int cnt3 = check_pq(); if (cnt1==0&&cnt2==0&&cnt3==0) puts("impossible"); else if (cnt1==1&&cnt2==0&&cnt3==0) puts("stack"); else if (cnt1==0&&cnt2==1&&cnt3==0) puts("queue"); else if (cnt1==0&&cnt2==0&&cnt3==1) puts("priority queue"); else puts("not sure"); } return 0; }