POJ - 1363 Rails(详细题解报告,stack的简单应用)

时间:2020.x.x
题意:注意 题目给出的顺序是出栈顺序
1.我门这道题其实就是要判断,出栈顺序是否合理?
2.中间站看作是一个stack (现进后出 后进先出的特点)
3.他强调车厢分裂 是想要告诉我们 一辆车可以立刻进立刻出,可一旦进入之后不出来 就要等到在栈位置中的上一辆车出去才可以出去
4.因为这个上面这个特点,所以才会有两个正确的出栈顺序12345(每一辆车立刻进了立刻出)和654321(所有车不出等到最后一起出)
5.特别强调:车的入栈顺序 永远都是123456…n
6.其次呢 stack的基本操作:pop pushback empty
7.最后呢 注意输入输出问题
感谢大佬提供的思路

https://blog.csdn.net/su20145104009/article/details/51397833

#include<iostream>
#include<stack>
const int N = 1010;
int n;
int a[N];
using namespace std;
int main()
{
	while (scanf("%d", &n) && n != 0)
	{
		while (true)
		{
			int k; scanf("%d", &k);
			if (k == 0)break;
			else a[0] = k;
			for (int i = 1; i < n; i++)
			{
				scanf("%d", &a[i]);
			}
			int x = 0;
			stack<int>s;
			for (int i = 0; i < n; i++)
			{
				s.push(i + 1);
				while (!s.empty() && s.top() == a[x])
				{
					s.pop();
					x++;
				}
			}
			if (x == n)printf("Yes\n");
			else printf("No\n");
		}
		printf("\n");//也同时意味着进入下一个关于n辆车出栈顺序的测试
	}
	printf("\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值