铁轨问题(栈操作)
程序员文章站
2022-04-09 12:48:20
...
题目
输入输出结果
理解
刚开始一直没理解输入的序列是进入C的还是进入B的序列(当然答案是进入B的序列),然后进入C的序列是按顺序的1,2,3…….
代码
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
const int maxn=1000;
int target[maxn];
int n;
int main()
{
while(cin>>n)
{
stack<int>s;
int A=1;
int B=1;
for(int i=1;i<=n;i++)
{
cin>>target[i];//该目标序列就是进入B车站的序列
}
int flag=1;
while(B<=n)
{
//入栈顺序和出栈顺序相同,此语句执行到底
if(A==target[B]){A++;B++;}
//入栈顺序与出栈顺序相反(逆序),则此语句执行到底
//当栈为空返回true
else if(!s.empty()&&s.top()==target[B]){s.pop();B++;}
//入栈操作,将可进栈元素进栈,还有一个作用是调整车厢为逆序出中转站
else if(A<=n){s.push(A);A++;}
//即不顺序也不逆序,就比如3,4,1,2这种是不存在的
else{flag=0;break;}
}
if(flag)
{
cout<<"YES\n";
}
else
{
cout<<"NO\n";
}
}
return 0;
}
图片演示
进入B序列为1,2,3
进入B序列为3,2,1
推荐阅读
-
jsp和servlet操作mysql中文乱码问题的解决办法
-
python中使用 xlwt 操作excel的常见方法与问题
-
linux 可执行文件与写操作的同步问题(文件读写操作产生的锁机制)
-
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
-
关于angularjs异步操作后台请求时,用$q.all排列先后顺序的问题
-
SQL Server 数据库调整表中列的顺序操作方法及遇到问题
-
解决jquery操作checkbox火狐下第二次无法勾选问题
-
Python基于多线程操作数据库相关问题分析
-
160WIFI开启蓝屏问题解决方法操作步骤介绍
-
unbuntu16初始化设置,并解决虚拟机操作系统窗口不能自适应问题