POJ1363 栈的应用 xingxing在努力
这道题给你一个1-N的数问能不能通过出栈入栈操作达到给定的序列。考虑给定的一个序列的第i个数, 假设这个数已经在栈中那么看一下栈顶的元素是不是这个数,不是就是NO, 假设这个数没有在栈中那么将这个数以及他前面的数都入栈, 再将这个数出栈,即可。。。代码如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <stack> using namespace std; int n; int a[1000 + 10]; bool in[1000 + 10]; stack<int> st; int main() { while(scanf("%d", &n) == 1 && n) { while(1) { scanf("%d", &a[0]); if(a[0] == 0) { printf("\n"); break; } for(int i=1; i<n; i++) scanf("%d", &a[i]); memset(in, 0, sizeof(in)); while(!st.empty()) st.pop(); bool res = true; for(int i=0; i<n; i++) { if(in[a[i]]) //这个元素已经入栈 { if(st.top() != a[i]) { res = false; break; } st.pop(); } else { int num = a[i]; int j = num; while(!in[j] && j>=0) j--; for(j=j+1; j<=num; j++) { st.push(j); in[j] = 1; } st.pop(); } } if(res) printf("Yes\n"); else printf("No\n"); } } return 0; }

浙公网安备 33010602011771号