2022天梯赛三月冲刺——PAT (Advanced Level)1051 Pop Sequence(栈+模拟)

题目大意:栈的容量为m,n个数一次放入栈中,中途可以弹出,问以下的序列是否可以生成

算法:用栈模拟整个过程,如果栈顶元素正好是目标序列中的那一项,则弹出,否则就继续往栈里面添加元素

代码如下:

今天晚上好累,学了英语六级、数学建模还做了一些(只有一道)天梯赛的题,感觉脑子要爆炸,希望尽快进入状态吧,最后一个月了!

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
int tar[1005];
stack<int>S;
int main()
{
	int m,n,k;
	cin >> m >> n >> k;
	while(k--)
	{
		for(int i = 1;i <= n;i++)
		{
			cin >> tar[i];
		}
		int poi=1;
		for(int i = 1;i <= n;i++)
		{
			if(S.size()>=m) break;
			S.push(i);
			while(S.empty()==0&&S.top()==tar[poi])
			{
				S.pop();
				poi++;
			}
		}
		if(k==0)
		{
			if(S.empty()) cout << "YES";
			else cout << "NO";
			break;
		}
		if(S.empty()) cout << "YES"<<endl;
		else cout << "NO"<<endl;
		while(!S.empty()) S.pop();
	}
	return 0 ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值