1051 Pop Sequence (25 minutes) / Stack simulation / control cycle conditions

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

After this question did not expect to get the problem-solving ideas, Liu saw the resolve of God know the general idea. But the control loop condition is still some difficulty, finally Liu God only reference the code completion amended. Or too little training in this area.

#include<iostream>
#include<stack>
#include<vector>
using namespace std;
int main() {
	int m, n, k;
	cin >> m >> n >> k;
	vector<int> v(n+1);
	while (k--) {
		for (int i = 1; i <= n; i++) {
			scanf("%d", &v[i]);
		}
		stack<int> s;
		int i = 1, j = 1;
		while (j <= n) {  
			s.push(j++);
			if (s.size() > m) break; //超过给定的栈的最大容量
			while (!s.empty() && s.top() == v[i]) {
				s.pop();
				i++;
			}
		}		
		printf("%s\n", i == n+1 ? "YES" : "NO");
	}
	return 0;
}
Published 28 original articles · won praise 5 · Views 608

Guess you like

Origin blog.csdn.net/weixin_43590232/article/details/104091282