洛谷B3614 [模板]栈

Description

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

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

Input

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

Output

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

Sample 1

InputcopyOutputcopy
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,即 ∑n≤10^6。保证 0≤x<2^64。

提示

  • 请注意大量数据读入对程序效率造成的影响。
  • 因为一开始数据造错了,请注意输出的 Empty 不含叹号,Anguei! 含有叹号。
#include<bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(0);  //这三行用于提高输出效率
    cin.tie(0);               //使用后不能再用endl,改用\n
    cout.tie(0);

    int T, n;//T表示数据组数,n表示操作的次数

    for(cin>>T; T; --T)   //输入T,有T组数据
    {
        //构建栈
        //unsigned long long int是无符号长整型变量,用于数据比较大的时候
        //每次都是一个新栈
        stack<unsigned long long int>s;

        for(cin>>n; n; --n)
        {
            string t;
            cin >> t;
            if(t == "push")
            {
                //x是属于栈里边的元素,也要unsigned long long int
                unsigned long long int x;
                cin >> x;
                s.push(x);//入栈
            }
            else if(t == "pop")
            {
                if(s.empty())
                {
                    cout << "Empty\n";
                }//判空
                else
                {
                    s.pop();//出栈
                }
            }
            else if(t == "query")
            {
                if(s.empty())
                {
                    cout<<"Anguei!\n";
                }
                else
                {
                    cout<<s.top()<<'\n';
                }
            }
            else
            {
                cout<<s.size() <<'\n';
            }
        }
    }
    return 0;
}

这是一道需要用到蛮多知识点的题,需要注意的是:

  •  提高效率的三行代码使用后不能再用endl,改用\n
  • 测试用例中可能会有超大数据,所以需要用unsigned long long int
  • for循环里的写法不常见
  • bool类型取值只有两个,非零值被转为 true,零被转为 false

 有关定义数据长度:

相关连接:

 for循环到底怎么使用:for的用法详解,for循环完全攻略-CSDN博客

bool类型详解:C++:布尔类型(bool)详细分析_c++ bool-CSDN博客

 有关三个提高代码效率:ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); 的作用和注意事项-CSDN博客

STL中stack的使用:stack的常见用法详解_stack用法-CSDN博客

 

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值