洛谷B3614 【模板】栈

文章目录

  • 【模板】栈
    • 题目链接:
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
      • 样例 1 解释
      • 数据规模与约定
      • 提示
  • CODE
  • 注意点



【模板】栈

题目链接:

点击此处。

题目描述

请你实现一个栈(stack),支持如下操作:

  • push(x):向栈中加入一个数 x x x
  • pop():将栈顶弹出。如果此时栈为空则不进行弹出操作,输出 Empty
  • query():输出栈顶元素,如果此时栈为空则输出 Anguei!
  • size():输出此时栈内元素个数。

输入格式

本题单测试点内有多组数据
输入第一行是一个整数 T T T,表示数据组数。对于每组数据,格式如下:
每组数据第一行是一个整数,表示操作的次数 n n n
接下来 n n n 行,每行首先由一个字符串,为 pushpopquerysize 之一。若为 push,则其后有一个整数 x x x,表示要被加入的数, x x x 和字符串之间用空格隔开;若不是 push,则本行没有其它内容。

输出格式

对于每组数据,按照「题目描述」中的要求依次输出。每次输出占一行。

样例 #1

样例输入 #1

2
5
push 2
query
size
pop
query
3
pop
query
size

样例输出 #1

2
1
Anguei!
Empty
Anguei!
0

提示

样例 1 解释

对于第二组数据,始终为空,所以 popquery 均需要输出对应字符串。栈的 size 为 0。

数据规模与约定

对于全部的测试点,保证 1 ≤ T , n ≤ 1 0 6 1 \leq T, n\leq 10^6 1T,n106,且单个测试点内的 n n n 之和不超过 1 0 6 10^6 106,即 ∑ n ≤ 1 0 6 \sum n \leq 10^6 n106。保证 0 ≤ x < 2 64 0 \leq x \lt 2^{64} 0x<264

提示

  • 请注意大量数据读入对程序效率造成的影响。
  • 因为一开始数据造错了,请注意输出的 Empty 不含叹号,Anguei! 含有叹号。


CODE

#include 
#include 
#include 
#define ll unsigned long long

using namespace std;

const int N = 1e7 + 10;
ll stk[N], x, tt, n, t;

int main(){
	char op[8];
	cin >> t;
	while(t--){
	    tt = 0;
		cin >> n;
		while(n--){
			scanf("%s", op);
			
			if(strcmp(op, "push") == 0){
				cin >> x;
				stk[++tt] = x;	
			}else if(strcmp(op, "pop") == 0){
				if(tt == 0) printf("Empty\n");
				else tt--;
			}else if(*op == 'q'){
				if(tt == 0) printf("Anguei!\n");
				else cout << stk[tt] << endl;
			}else cout << tt << endl;
		}
	}
} 

注意点

  1. 数据范围是[0, 2^64 - 1],所以应该用unsigned long long
  2. 输入输出ull类型应该用格式字符%llu
  3. 每次操作完需要清空栈。(题目中根本没提啊 <_>)
  4. 因为是ull,所以别用tt = -1,因为ull存的全是正数。

我的评价是垃圾题目,题目描述都描述不明白,害我浪费时间。

你可能感兴趣的:(解题报告,#,栈,笔记)