请你实现一个栈(stack),支持如下操作:
push(x):向栈中加入一个数 x。pop():将栈顶弹出。如果此时栈为空则不进行弹出操作,输出 Empty。query():输出栈顶元素,如果此时栈为空则输出 Anguei!。size():输出此时栈内元素个数。本题单测试点内有多组数据。
输入第一行是一个整数 T,表示数据组数。对于每组数据,格式如下:
每组数据第一行是一个整数,表示操作的次数 n。
接下来 n 行,每行首先由一个字符串,为 push,pop,query 和 size 之一。若为 push,则其后有一个整数 x,表示要被加入的数,x 和字符串之间用空格隔开;若不是 push,则本行没有其它内容。
对于每组数据,按照「题目描述」中的要求依次输出。每次输出占一行。
2
5
push 2
query
size
pop
query
3
pop
query
size
2
1
Anguei!
Empty
Anguei!
0
对于第二组数据,始终为空,所以 pop 和 query 均需要输出对应字符串。栈的 size 为 0。
对于全部的测试点,保证 1≤T,n≤106,且单个测试点内的 n 之和不超过 106,即 ∑n≤106。保证 0≤x<264。
Empty 不含叹号,Anguei! 含有叹号。这道题我写了个用STL的栈,但是找了半天bug一直没有,由于这道题在主题库应该是没有,所以我把整个题目ctrl+cv了。如果有做错什么大佬们可以随意说我,我会细心去听的
这是我的代码,而且33分。。。,三个点,只对了第一个点,是WA不是其他测试点
#include<bits/stdc++.h>
using namespace std;
int main(){
long long T;
cin >> T;
for (int i = 1;i <= T;i++){
int n;
cin >> n;
stack<long long>st;
for (int j = 1;j <= n;j++){
string s;
cin >> s;
if (s == "push"){
long long res;
cin >> res;
st.push(res);
}
else if (s == "query"){
if (st.empty() != true){
cout << st.top() << endl;
}
else {
cout << "Anguei!" << endl;
}
}
else if (s == "size"){
cout << st.size() << endl;
}
else if (s == "pop"){
if (st.empty() != true){
st.pop();
}
else {
cout << "Empty"<< endl;
}
}
}
}
return 0;
}