PAT_(栈) 1051 Pop Sequence

 

 

 

1051 Pop Sequence (25分)

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.

#include
#include
using namespace std;
const int N = 1024;
stackst;
int a[N], n, m, k;

int check()
{
	while (!st.empty()) st.pop();
	int p = 1, t;
	for (int i = 0; i < n; i++)
	{
		while (p <= a[i])
		{
			st.push(p);
			p++;
			if (st.size() > m) return 0;
		}
		t = st.top();
		if (t != a[i]) return 0;
		st.pop();
	}

	return 1;
}

int main()
{
	scanf("%d%d%d", &m, &n, &k);
	for (int _ = 0; _ < k; _++)
	{
		for (int i = 0; i < n; i++)
			scanf("%d", &a[i]);
		if (check()) puts("YES");
		else puts("NO");
	}
	return 0;
}

 

你可能感兴趣的:(pat)