这是C++刷题的Day2

🕋题目描述
🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀
栈和队列都是常用的线性结构,它们都提供两个操作:
Push:加入一个元素。
Pop:弹出一个元素。
不同的是,栈是”先进后出”,而队列则是”先进先出”。
给出一个线性结构的进出顺序,判定这个结构是栈还是队列。
输入格式
第一行输入一个整数T,代表有T组测试数据,T<=20
对于每组测试数据:
第一行,一个整数n,代表操作的次数。3<=n<=2000
接下来n行,每行包含两个整数 type val。当type = 1时,表示该次操作为push操作,val表示进入的数字。当type=2时,表示该次操作为pop操作,val代表出来的数字。
输出格式
每组测试数据输出一行。
输出改组数据对应的线性结构,”Stack” 或者 “Queue”。
题目保证是栈或者队列的一种。
输入输出样列
输入样例1:
2
6
1 1
1 2
1 3
2 3
2 2
2 1
4
1 1
1 2
2 1
2 2
输出样例1:
Stack
Queue
🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀
🔑思路
模拟栈和队列,每次检查栈的栈顶元素和队列的队头元素是否匹配即可
💯CODE代码:
#include
#pragma GCC optimize(2)
#define fi first
#define se second
#define min3 (x , y , z) min (x , min (y , z))
#define max3 (x , y , z) max (x , max (y , z))
using namespace std ;
typedef long long LL ;
typedef double LF ;
typedef pair < int , int > PII ;
int cmd , val ;
int main ()
{
int t ;
cin >> t ;
while (t -- ) {
queue < int > q ;
stack < int > stk ;
int n ;
cin >> n ;
int vis = 0 ;
while (n -- ) {
cin >> cmd >> val ;
if (cmd == 1) {
stk.push (val) ;
q.push (val) ;
} else if (! q.empty () && ! stk.empty ()) {
int tq = q.front () , ts = stk.top () ;
if (val != tq && ! vis) {
vis = 2 ;
} else if (val != ts && ! vis) {
vis = 1;
}
if (! q.empty())
q.pop () ;
if (! stk.empty ())
stk.pop () ;
}
}
if (vis == 1)
cout << "Queue" ;
else
cout << "Stack" ;
puts ("") ;
}
return 0 ;
}