题意:
UVa514 Rails(铁轨)
题目:铁轨
题目链接:UVa514链接
题目描述:
某城市有一个火车站,有n节车厢从A方向驶入车站,按进站的顺序编号为1-n.你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶入车站。例如,出栈顺序(5 4 1 2 3)是不可能的,但是(5 4 3 2 1)是可能的。
分析:
-
首先,要知道这是关于栈的题,而且是用来判断一段数字是否能够用入栈出栈来得出.
- 首先,如果A和B的数字在某个位置是相同的,比如入栈和出栈都是(1,2,3,4,5),那么也就是说,一个数字在刚刚入栈之后就出栈.
- 如果上述不匹配,那么就看栈中的(首先要判断栈中是否存在数字)是否和train[]中的数字匹配;如果匹配,说明这个数字要出栈;
- 如果上述还不匹配,那么A中的数字就要进栈;
- 如果上述都不匹配,说明这段数字不能够被入栈和出栈得出;
#include<iostream>
#include<stack>
#include<stdio.h>
using namespace std;
int main()
{
int A,B;
int n;
while(cin>>n)
{
stack<int>C;
int target[100];
A=1;
B=1;
for(int i=1; i<=n; i++)
{
cin>>target[i];
}
int ok=1;
while(B<=n)
{
//第一种结果
if(A==target[B])
{
A++;
B++;
}
//第二种结果
else if(!C.empty()&&C.top()==target[B])
{
C.pop();B++;
}
//第三种结果
else if(A<=n){A++;C.push(A);}
else {
//说明不能;
ok=0;break;
}
}
cout<<(ok?"YES":"NO")<<endl;
}
}
此题旨在模拟,但是以上代码并没有提交测试,所以不一定正确,但思想没错.
<<endl;
}
}
此题旨在模拟,但是以上代码并没有提交测试,所以不一定正确,但思想没错.