总时间限制: 1000ms 内存限制: 65535kB
描述
栈和队列都是常用的线性结构,它们都提供两个操作:
Push:加入一个元素。
Pop:弹出一个元素。
不同的是,栈是” 先进后出”,而队列则是” 先进先出”。
给出一个线性结构的进出顺序,判定这个结构是栈还是队列。
输入
第一行输入一个整数 t,代表有 t 组测试数据
对于每组测试数据,第一行输入一个整数 n,代表操作的次数。
随后输入 n 行,每行包含两个整数 type val。
当 type = 1 时,表示该次操作为 push 操作,val 表示进入的数字。当 type=2 时,表示该次操作为 pop 操作,val 代表出来的数字。
3<=n<=2000
输出
每组测试数据输出一行。
输出改组数据对应的线性结构,”Stack” 或者 “Queue”。
题目保证是栈或者队列的一种。
样例输入
1 2 3 4 5 6 7 8 9 10 11 12 13 2 6 1 1 1 2 1 3 2 3 2 2 2 1 4 1 1 1 2 2 1 2 2
样例输出
思路
我想了一下,还是弄两个 array 来解决这个问题,虽说时间复杂度会是 O ( n ) O(n) O ( n ) 。但是,可以解决目前的问题
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include <bits/stdc++.h> #define push 1 #define pop 2 using namespace std; int main () { int t, n, type; cin >> t; for (int i = 0 ; i < t; i++) { array<int , 2000> A, B; cin >> n; int k = 0 , o = 0 ; for (int j = 1 ; j <= n; j++) { cin >> type; if (type == push) { cin >> A[k++]; } else if (type == pop) { cin >> B[o++]; } } for (int j = 0 ; j < o; j++) { if (A[j] != B[j]) goto out; } cout << "Queue" << endl; goto out1; out:; cout << "Stack" <<endl; out1:; } }