https://vjudge.net/problem/UVA-514
解题思路:.A的铁轨从1到n依次判断 如果和当前轮到的铁轨相同 则从A驶入B,如果不相同,则入栈等候。每次判断之前先判断栈顶的元素是否和当前轮到的铁轨相同 直到不相同为止。
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int N;
while(cin >> N&&N)
{
int target[1010];
while(cin >> target[1]&&target[1])
{
stack<int> s;
for(int i = 2 ; i <= N ; i++)
{
cin >> target[i];
}
int A = 1,B = 1;
int result[1010];
for(int i = 1 ; i <= N ; i++)
{
while(!s.empty()&&s.top() == target[A])
{
result[B] = s.top();
B++;
s.pop();
A++;
}
if(target[A] != i)
{
s.push(i);
}
else{
result[B] = i;
A++;
B++;
}
}
while(!s.empty())
{
result[B] = s.top();
s.pop();
B++;
}
bool r = true;
for(int i = 1 ; i <= N ; i++)
{
if(target[i] != result[i])
{
r = false;
break;
}
}
if(r){cout << "Yes"<<endl;}
else{
cout << "No" <<endl;
}
}
cout << endl;
}
return 0;
}