玄关求条

B3614 【模板】栈

Austin_Chen @ 2024-10-24 16:29:06

#include<bits/stdc++.h>
using namespace std;
vector<unsigned long long> vc;
int n,x,t;
string o;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(); 
    cin>>t;
    while(t--) 
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>o;//确定操作
            if(o=="push") 
            {
                cin>>x;
                vc.push_back(x);
            }
            if(o=="pop")
            {
              if(!vc.empty()) vc.pop_back();
                else cout<<"Empty"<<'\n';
            }
            if(o=="query")
            {
              if(!vc.empty()) cout<<vc.back()<<'\n';
                else cout<<"Anguei!"<<'\n'; 
            }
            if(o=="size") cout<<vc.size()<<'\n';
        }
    } 
    return 0;
} 

by __int1024 @ 2024-10-24 16:41:13

@Austin_Chen x 也要是 unsigned long long 类型的。


by qcf2010 @ 2024-10-24 16:50:23

错误原因楼上的已经说了。

本题的目的就是手写栈,若要用 STL,为何不直接使用 stack 呢?

#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int N=1e6+10;

int n,t,top;
ull sta[N],x;
string op;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0); 
    cin>>t;
    while(t--){
        top=0;
        cin>>n;
        while(n--){
            cin>>op;
            if(op=="push"){
                cin>>x;
                sta[++top]=x;
            }else if(op=="pop"){
                if(top) --top;
                else cout<<"Empty\n";
            }else if(op=="query"){
                if(top) cout<<sta[top]<<"\n";
                else cout<<"Anguei!\n"; 
            }else if(op=="size") cout<<top<<"\n";
        }
    } 
    return 0;
} 

by zzhengxi @ 2024-10-24 16:52:04

@Austin_Chen 首先,x 开 unsigned long long;其次,每次循环时要 vc.clear().


by zzhengxi @ 2024-10-24 16:54:22

@qcf2010 他写的是用vector模拟栈,两种方法都能AC


by Austin_Chen @ 2024-10-24 18:52:35

@zzhengxi 感谢,虽然之前已经A了


by Austin_Chen @ 2024-10-24 18:53:21

@qcf2010 STL封装的太慢了,用vector模拟会快一点


|