大家好,我是小黄呀。
VJ题目传送门
题目大意
有n节车厢从A方向驶入车站,按照1~n的顺序编号,判断能否按照特定的顺序从B方向驶出。 即从A方向按序入栈,从B出栈,运用逆向思维判断是否符合栈的后进先出原则。
具体代码
#include<cstdio>
#include<stack>
using namespace std
;
const int MAXN
= 1000 + 10;
int n
,target
[MAXN
];
int main()
{
while(scanf("%d",&n
)==1)
{
stack
<int> s
;
int A
=1,B
=1;
for(int i
=1;i
<n
;i
++)
scanf("%d",&target
[i
]);
int ok
=1;
while(B
<=n
)
{
if(A
==target
[B
])
{
A
++;
B
++;
}
else if(!s
.empty()&&s
.top()==target
[B
])
{
s
.pop();
B
++;
}
else if(A
<=n
)
s
.push(A
++);
else
{
ok
=0;
break;
}
}
printf("%s\n",ok
?"Yes": "No");
}
return 0;
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-56627.html