题目描述
一天小明去排队买电影票,然后她发现队伍已经有了n个人,分别为a1,a2…an。小明不想排队,于是她开始观察这条队伍m秒, 每秒仅有1个人来排队或者排在最后的那个人不耐烦走了,如果在这一秒内两者都没有发生那么小明就想知道队伍还有没有人。
输入
第一行有两个整数n(n≤1000),m(m≤10000)。第二行有n个整数ai(ai≤100000)表示排在第i位是人是ai。接下来m行,每行有一个整数p(p≤3),当p=1时则当前行还存在另一个整数x(x≤100000)表示x来排队;当p=2时则表示排在最后的那个人不耐烦走了;当p=3时小明想知道队伍还有没有人。
输出
若干行,每一行表示队伍还有没有人,没有人输出YES,有输出排在最后的人是谁。
样例输入
3 8
1 2 3
1 4
3
2
3
2
2
2
3
样例输出
4
3
YES
来源/作者: CCF基础篇
Cake 1#
#include<cstdio>
using namespace std;
int n,m,a[100010],i,j,k,l,p;
bool q;
int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++) scanf("%d",&a[i]);
i=n;
for(j=1;j<=m;j++)
{
scanf("%d",&p);
if(p==1)
{
i++;
scanf("%d",&a[i]);
}
if(p==2)
{
a[i]=0;
i--;
}
if(p==3)
{
q=false;
for(k=i;k>=1;k--)
{
if(a[i]>0)
{
printf("%d\n",a[k]);
q=true;
k=1;
}
}
if(!q) printf("YES\n");
}
}
}
Cake 2#
#include<cstdio>
#include<stack>
#include<algorithm>
using namespace std;
stack<int>array;
inline int read(){
int x=0,f=1;
char ch;
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return f*x;
}
main(){
int n=read(),m=read();
for(int i=0;i<n;i++){array.push(read());}
for(int i=0;i<m;i++){
int p=read();
if(p==1){array.push(read());continue;}
if(p==2){array.pop();continue;}
if(p==3){if(array.empty())printf("YES\n");else printf("%d\n",array.top());}
}
return 0;
}