目录
一、828 模拟栈
//进栈
stk[tt++]=x;
//出栈
tt--;
//输出栈顶元素
stk[tt-1]
实现一个栈,栈初始为空,支持四种操作:
push x
– 向栈顶插入一个数 x;pop
– 从栈顶弹出一个数;empty
– 判断栈是否为空;query
– 查询栈顶元素。现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。
输入格式
第一行包含整数 M,表示操作次数。
接下来 M 行,每行包含一个操作命令,操作命令为
push x
,pop
,empty
,query
中的一种。输出格式
对于每个
empty
和query
操作都要输出一个查询结果,每个结果占一行。其中,
empty
操作的查询结果为YES
或NO
,query
操作的查询结果为一个整数,表示栈顶元素的值。数据范围
1≤M≤100000
1≤x≤10^9
所有操作保证合法。输入样例:
10 push 5 query push 6 pop query pop empty push 4 query empty
输出样例:
5 5 YES 4 NO
#include <iostream>
using namespace std;
const int N=1e5+10;
int stk[N],tt; //tt表示栈顶下标
int main()
{
int m,x;
string s;
cin>>m;
while(m--)
{
cin>>s;
if(s=="push")
{
cin>>x;
stk[tt++]=x;
}
else if(s=="pop") tt--;
else if(s=="empty")
{
if(tt>0) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
else cout<<stk[tt-1]<<endl;
}
}
二、3302 表达式求值
挺难的 先放放 暑假再干
给定一个表达式,其中运算符仅包含
+,-,*,/
(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。注意:
- 数据保证给定的表达式合法。
- 题目保证符号
-
只作为减号出现,不会作为负号出现,例如,-1+2
,(2+2)*(-(1+1)+2)
之类表达式均不会出现。- 题目保证表达式中所有数字均为正整数。
- 题目保证表达式在中间计算过程以及结果中,均不超过 2^31−1。
- 题目中的整除是指向 0 取整,也就是说对于大于 0 的结果向下取整,例如 5/3=15/3=1,对于小于 0 的结果向上取整,例如 5/(1−4)=−15/(1−4)=−1。
- C++和Java中的整除默认是向零取整;Python中的整除
//
默认向下取整,因此Python的eval()
函数中的整除也是向下取整,在本题中不能直接使用。输入格式
共一行,为给定表达式。
输出格式
共一行,为表达式的结果。
数据范围
表达式的长度不超过 10^5。
输入样例:
(2+2)*(1+1)
输出样例:
8
三、829 模拟队列
int q[N],hh,tt=-1;
//入队
q[++tt]=x;
//出队
hh++;
//取队头元素
q[hh]
实现一个队列,队列初始为空,支持四种操作:
push x
– 向队尾插入一个数 x;pop
– 从队头弹出一个数;empty
– 判断队列是否为空;query
– 查询队头元素。现在要对队列进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。
输入格式
第一行包含整数 M,表示操作次数。
接下来 M 行,每行包含一个操作命令,操作命令为
push x
,pop
,empty
,query
中的一种。输出格式
对于每个
empty
和query
操作都要输出一个查询结果,每个结果占一行。其中,
empty
操作的查询结果为YES
或NO
,query
操作的查询结果为一个整数,表示队头元素的值。数据范围
1≤M≤100000
1≤x≤10^9
所有操作保证合法。输入样例:
10 push 6 empty query pop empty push 3 push 4 pop query push 6
输出样例:
NO 6 YES 4
#include <iostream>
using namespace std;
const int N=1e5+10;
int q[N],hh,tt=-1; //hh代表队头 tt代表队尾
int main()
{
int m,x;
string s;
cin>>m;
while(m--)
{
cin>>s;
if(s=="push")
{
cin>>x;
q[++tt]=x;
}
else if(s=="pop") hh++;
else if(s=="empty")
{
if(tt>=hh) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
else cout<<q[hh]<<endl;
}
}