解题代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
int M, N, K, i, j;
scanf("%d %d %d", &M, &N, &K);
for (i = 0; i < K; i++) {
int *a = (int *)malloc(N * sizeof(int));
int *b = (int *)malloc((N + 1) * sizeof(int));
for (j = 0; j < N; j++) scanf("%d", &a[j]);
int top = -1, ptr = 0, instack = 1;
while (ptr < N) {
if (instack == a[ptr] && top < M - 1) {
ptr++;
instack++;
}
else if (top > -1 && a[ptr] == b[top]) {
top--;
ptr++;
}
else if (top < M-2 && ptr < N) {
b[++top] = instack++;
}
else break;
}
if (ptr < N) printf("NO\n");
else printf("YES\n");
}
return 0;
}
测试结果
问题整理
1.这题的NMK不要弄混。
2.这题的分类思想值得学习。