Description
Input
Output
Sample Input
5 1 2 3 4 5 5 4 1 2 3 0 6 6 5 4 3 2 1 0 0
Sample Output
Yes No Yes
题意:要按1-n序列入栈,求给出的序列是否是合理的出栈序列
思路:模拟栈的过程,两个指针,一个指向当前的出栈序列位置,一个指向入栈序列的位置,当当前出栈数是大于入栈的数的话就要将入栈的数压入栈,相等就移除,小的话就判断当前入栈数和栈顶的大小
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <stack> using namespace std; const int MAXN = 1005; stack<int> st; int n, num[MAXN]; int main() { while (scanf("%d", &n) != EOF && n) { while (scanf("%d", &num[1]) && num[1]) { for (int i = 2; i <= n; i++) scanf("%d", &num[i]); int ans = 1; int cur = 1, cnt = 1; while (!st.empty()) st.pop(); while (cur <= n) { if (num[cur] > cnt) st.push(cnt++); else if (num[cur] == cnt) { cur++; cnt++; } else if (!st.empty()) { if (st.top() != num[cur]) { ans = 0; break; } st.pop(); cur++; } } if (ans) printf("Yes\n"); else printf("No\n"); } printf("\n"); } return 0; }
POJ - 1363 Rails,布布扣,bubuko.com
原文:http://blog.csdn.net/u011345136/article/details/37901331