当前位置: 代码迷 >> 综合 >> pat--1051 Pop Sequence(25 分)(stack出栈入栈)
  详细解决方案

pat--1051 Pop Sequence(25 分)(stack出栈入栈)

热度:42   发布时间:2023-12-26 10:06:14.0

题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805427332562944

【分析】

题意:栈的入栈和出栈。以1~N的顺序入栈,判断出栈序列是否和给定序列相同。

思路:如果栈顶元素和序列对应元素相等时,就pop掉,直到序列为空。如果存栈数目大于给定数目,flag=0,退出循环。(因为如果要出栈的话,肯定要与序列元素对应,不然就不可以出栈。所以,当入栈的数目大于m时,就说明不可以了。)

【代码】

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
int a[1005];
stack<int>s;
int main()
{int m,n,k;scanf("%d%d%d",&m,&n,&k);while(k--){while(!s.empty())s.pop();int flag=1,t=1;for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++){s.push(i);if(s.size()>m){flag=0;break;	}	while(!s.empty()&&s.top()==a[t]){s.pop();t++;}}if(s.empty()&&flag)printf("YES\n");else printf("NO\n");}return 0;
}

 

  相关解决方案