题意:一列有n节车厢的火车按顺序进站,给你一个出站顺序,问你该火车的车厢能否以该顺序出站?
分析:出站的车厢满足后进先出的关系,所以我们考虑采用栈s
假设车厢一共有n节,n = 5;
进站顺序A:1 2 3 4 5
出站顺序B/target: 2 3 4 5 1
如果进站的车厢没有立马出站,则将该车厢入栈s.push(A++)
判断栈里面车厢的顺序是否和出站顺序一致 s.top()== target[B]
#include<cstdio> #include<stack> using namespace std; int main() { int n,target[1005]; stack<int>s; while(~scanf("%d",&n)&&n) { while(1){ int flag = 0; for(int i=1;i<=n;i++) { scanf("%d",&target[i]); if(target[i] == 0) { flag = -1; break; } } if(flag == -1) { printf(" "); break; } int A=1,B=1; while(B <= n) { if(A == target[B]){A++;B++;} else if(!s.empty()&&s.top()==target[B]){B++;s.pop();} else if(A <= n) s.push(A++); else {flag =-1; break;} } if(flag == -1) printf("No "); else printf("Yes "); } } return 0; }