B3614 【模板】栈题解
B3614 【模板】栈
题目描述
请你实现一个栈(stack),支持如下操作:
push(x):向栈中加入一个数 xxx。pop():将栈顶弹出。如果此时栈为空则不进行弹出操作,输出Empty。query():输出栈顶元素,如果此时栈为空则输出Anguei!。size():输出此时栈内元素个数。
输入格式
本题单测试点内有多组数据。
输入第一行是一个整数 TTT,表示数据组数。对于每组数据,格式如下:
每组数据第一行是一个整数,表示操作的次数 nnn。
接下来 nnn 行,每行首先由一个字符串,为 push,pop,query 和 size 之一。若为 push,则其后有一个整数 xxx,表示要被加入的数,xxx 和字符串之间用空格隔开;若不是 push,则本行没有其它内容。
输出格式
对于每组数据,按照「题目描述」中的要求依次输出。每次输出占一行。
输入输出样例 #1
输入 #1
2
5
push 2
query
size
pop
query
3
pop
query
size
输出 #1
2
1
Anguei!
Empty
Anguei!
0
说明/提示
样例 1 解释
对于第二组数据,始终为空,所以 pop 和 query 均需要输出对应字符串。栈的 size 为 0。
数据规模与约定
对于全部的测试点,保证 1≤T,n≤1061 \leq T, n\leq 10^61≤T,n≤106,且单个测试点内的 nnn 之和不超过 10610^6106,即 ∑n≤106\sum n \leq 10^6∑n≤106。保证 0≤x<2640 \leq x \lt 2^{64}0≤x<264。
提示
- 请注意大量数据读入对程序效率造成的影响。
- 因为一开始数据造错了,请注意输出的
Empty不含叹号,Anguei!含有叹号。
思路
直接手写栈即可。
代码见下
#include<bits/stdc++.h>
using namespace std;
unsigned long long t,n,a[10000007],b=0,c;
string s;
int main(){
cin>>t;
while(t--){
b=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
if(s=="push"){
cin>>c;
a[++b]=c;
}
else if(s=="query"){
if(b!=0){
cout<<a[b]<<endl;
}
else{
cout<<"Anguei!"<<endl;
}
}
else if(s=="size"){
cout<<b<<endl;
}
else{
if(b!=0){
b--;
}
else{
cout<<"Empty"<<endl;
}
}
}
}
return 0;
}

浙公网安备 33010602011771号