Description
请你实现一个栈(stack),支持如下操作:
push(x)
:向栈中加入一个数 x。pop()
:将栈顶弹出。如果此时栈为空则不进行弹出操作,输出Empty
。query()
:输出栈顶元素,如果此时栈为空则输出Anguei!
。size()
:输出此时栈内元素个数。
Input
本题单测试点内有多组数据。
输入第一行是一个整数 T,表示数据组数。对于每组数据,格式如下:
每组数据第一行是一个整数,表示操作的次数 n。
接下来 n 行,每行首先由一个字符串,为 push
,pop
,query
和 size
之一。若为 push
,则其后有一个整数 x,表示要被加入的数,x 和字符串之间用空格隔开;若不是 push
,则本行没有其它内容。
Output
对于每组数据,按照「题目描述」中的要求依次输出。每次输出占一行。
Sample 1
Inputcopy | Outputcopy |
---|---|
2 5 push 2 query size pop query 3 pop query size | 2 1 Anguei! Empty Anguei! 0 |
Hint
样例 1 解释
对于第二组数据,始终为空,所以 pop
和 query
均需要输出对应字符串。栈的 size 为 0。
数据规模与约定
对于全部的测试点,保证 1≤T,n≤10^6,且单个测试点内的 n 之和不超过 10^6,
提示
- 请注意大量数据读入对程序效率造成的影响。
- 因为一开始数据造错了,请注意输出的
Empty
不含叹号,Anguei!
含有叹号。
-
首先,定义了一个常量N,表示栈的最大容量为1000010。同时,定义了一个unsigned long long类型的数组stk,用于存储栈中的元素。还定义了一个整型变量tt,用于指示栈顶的位置。
-
主函数开始,先读取一个整数T,表示有T组测试数据。
-
进入第一个while循环,循环T次,即处理每一组测试数据。
-
在每一组测试数据中,首先读取一个整数n,表示该组测试数据中操作的个数。
-
然后,进入第二个while循环,循环n次,即处理每一个操作。
-
在每一个操作中,首先读取一个字符串op,表示操作的类型。根据op的不同,执行不同的操作。
-
如果op是"push",则读取一个unsigned long long类型的数x,并将x压入栈中。
-
如果op是"pop",则判断栈是否为空。如果栈不为空,则将栈顶元素弹出,并将tt减1;否则输出"Empty"。
-
如果op是"query",则判断栈是否为空。如果栈不为空,则输出栈顶元素;否则输出"Anguei!"。
-
如果op是"size",则输出当前栈中元素的个数tt。
-
内层循环结束后,处理完了该组测试数据。
-
外层循环结束后,所有的测试数据都处理完了。
-
最后,主函数返回0,表示程序正常运行结束。
源码如下:
#include<iostream>
using namespace std;
const int N=1000010;
unsigned long long stk[N];
int tt;
int main(){
int T;
scanf("%d",&T);
tt=0;
while(T--){
int n;
scanf("%d",&n);
tt=0;
while(n--){
char op[10];
unsigned long long x;
scanf("%s",op);
if(op[0]=='p' && op[1]=='u'){
scanf("%llu",&x);
stk[++tt]=x;
}
else if(op[0]=='p'&&op[1]=='o'){
if(tt>0){
tt--;
}
else{
puts("Empty");
}
}
else if(op[0]=='q'){
if(tt>0){
printf("%llu\n",stk[tt]);
}
else
puts("Anguei!");
}
else{
printf("%d\n",tt);
}
}
}
return 0;
}
标签:输出,tt,long,query,pop,数组,简单,编写,op From: https://blog.csdn.net/2301_80345285/article/details/140544793