Pop Sequence
Posted waiting-nobody
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pop Sequence相关的知识,希望对你有一定的参考价值。
Pop Sequence::
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and N is 7, we can obtain 1, 2, 3, 4, 5, 6, 7 from the stack, but not 3, 2, 1, 7, 5, 6, 4.
Input Specification:
Each input file contains one test case. For each case, the first line contains 3 numbers (all no more than 1000): M(the maximum capacity of the stack), N (the length of push sequence), and K (the number of pop sequences to be checked). Then K lines follow, each contains a pop sequence of N numbers. All the numbers in a line are separated by a space.
Output Specification:
For each pop sequence, print in one line "YES" if it is indeed a possible pop sequence of the stack, or "NO" if not.
Sample Input:
5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2
Sample Output:
YES
NO
NO
YES
NO
#include<iostream> using namespace std; struct stack { int* array; int size; int top; }; void creat_stack(stack*& x, int n) { x->array = new int[n]; memset(x->array, 0, sizeof(int) * n); x->size = n; x->top = -1; } bool Is_empty(stack*& x) { return (x->top == -1); } bool Is_full(stack*& x) { return (x->top == x->size - 1); } bool push(stack*& x, int a) { if (Is_full(x)) { cout << "The stack is full. "; return 0; } else { x->array[++x->top] = a; return 1; } } int pop(stack*& x) { if (Is_empty(x)) { cout << "The stack is empty. "; exit(0); } else { return x->array[x->top--]; } } bool judge_it(int* x, int m, int n) { stack* s = new stack; creat_stack(s, m); int flag = 1; bool judge = 1; for (int i = 0; i < n; i++) { if (Is_empty(s)) { while (flag <= x[i]) { if (Is_full(s)) return false; else push(s, flag++); } pop(s); } else { int temp = pop(s); if (x[i] > temp) { push(s, temp); while (flag <= x[i]) { if (Is_full(s)) return false; else push(s, flag++); } pop(s); } if (x[i] < temp) return false; } } return true; } int main() { int m = 0, n = 0, k = 0; cin >> m >> n >> k; int* array = new int[n]; bool* judge = new bool[k]; for (int i = 0; i < k; i++) { for (int j = 0; j < n; j++) cin >> array[j]; judge[i] = judge_it(array, m, n); } for (int i = 0; i < k; i++) { if (judge[i]) cout << "Yes "; else cout << "No "; } }
以上是关于Pop Sequence的主要内容,如果未能解决你的问题,请参考以下文章