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

题目链接: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;
}

猜你喜欢

转载自blog.csdn.net/qq_38735931/article/details/82381540