#B3614. 【模板】栈

    ID: 4942 传统题 1000ms 128MiB 尝试: 2 已通过: 2 难度: 10 上传者: 标签>数据结构模拟模板题难度:普及−来源:洛谷

【模板】栈

B3614 【模板】栈

难度: 普及−
标签: 数据结构、栈、模拟、模板题
来源: 洛谷 B3614

题目背景

本题围绕“【模板】栈”所描述的场景展开。请维护一个栈,并依次处理以下四类命令: - push x:把无符号整数 xx 压入栈顶; - pop:弹出栈顶元素。

下面的题面采用非逐字重述方式整理,但保留原题中的全部判定条件、边界含义、输入输出要求与特殊约定。

题目描述

请维护一个栈,并依次处理以下四类命令:

  • push x:把无符号整数 xx 压入栈顶;
  • pop:弹出栈顶元素。若当前栈为空,则不修改栈,并输出 Empty
  • query:查询并输出栈顶元素。若当前栈为空,则输出 Anguei!
  • size:输出当前栈中元素的个数。

栈遵循“后进先出”的规则。本题一个测试点中包含多组相互独立的数据,每组开始时栈均为空。

完整规则与任务要求

处理本题时,必须同时满足下列全部要求,不能只实现其中一部分:

  • 请维护一个栈,并依次处理以下四类命令:。
  • push x:。
  • 把无符号整数 xx 压入栈顶;。
  • 若当前栈为空,则不修改栈,并输出 Empty;。
  • query:。
  • 查询并输出栈顶元素。
  • 若当前栈为空,则输出 Anguei!;。
  • 输出当前栈中元素的个数。
  • 每组数据开始前栈为空,不同数据组之间不能保留元素。
  • popquery 在空栈时输出的字符串不同,必须严格区分。

程序应完整读取“输入格式”中规定的所有数据,并严格按照“输出格式”给出结果。题目中的区间端点、编号起点、排序优先级、同分处理、空结构处理、取模方式和特殊字符串,均以本题面明确写出的规则为准。

输入格式

第一行输入一个整数 TT,表示数据组数。

对每组数据:

  1. 第一行输入一个整数 nn,表示本组操作次数;
  2. 接下来 nn 行,每行输入一条命令。命令名只可能是 pushpopquerysize。只有 push 后面还会跟一个整数 xx,命令与 xx 之间以空格分隔。

输出格式

按照命令要求输出结果,每次输出独占一行。没有要求输出的命令不产生任何内容。

输入输出样例

2
5
push 2
query
size
pop
query
3
pop
query
size
2
1
Anguei!
Empty
Anguei!
0

样例说明

第一组中,压入 22 后,栈顶是 22,栈大小是 11;弹出后再次查询,栈已为空,因此输出 Anguei!

第二组从始至终没有成功压入元素,所以 popquerysize 分别得到 EmptyAnguei!0

数据范围与注意事项

  • 1T,n1061\le T,n\le 10^6
  • 同一个测试点内,所有数据组的操作次数总和满足 n106\sum n\le 10^6
  • 0x<2640\le x<2^{64},因此 C++ 中应使用 unsigned long long 保存元素;
  • 数据量较大,应使用较快的输入输出;
  • Empty 不含感叹号,而 Anguei! 含感叹号。

本题面依据洛谷 B3614 的公开题目信息重新整理,为内容完整的非逐字重述版。