1051. Pop Sequence

来源:互联网 发布:海尔电视电视直播软件 编辑:程序博客网 时间:2024/06/06 04:16

这道题以前mooc上做过,记得是差几个测试点,死活AC不了。这次居然一次过了。要注意吃掉判断no之后的数据。思路是要么往pop栈顶元素,要么放入几个之后pop。

#include <stdio.h>#include <stdlib.h>int main(){int m, n, i, k, num,flag,Pop,Top,Max;scanf("%d %d %d", &m, &n, &k);while (k--) {int *stack = (int*)malloc(sizeof(int)*(n+1));for (i = 0; i < n + 1; i++)stack[i] = 0;flag = 0; Top = 0; num = 0; Max = 0;for (i = 0; i < n;i++) {scanf("%d", &Pop);if (flag) continue;if (stack[Pop]||Pop<Top) {flag = 1;continue;}if (Pop > Top) {stack[Pop] = 1;num += Pop - Max - 1;if (num >= m) {flag = 1;continue;}Max = Pop;/*记录最大元素*/Top = Max - 1;}else if (Pop == Top) {stack[Pop] = 1;num--;}Top = Max;while(stack[Top])/*找到栈顶元素*/Top--;}if (flag)printf("NO\n");else printf("YES\n");free(stack);}return 0;}


0 0
原创粉丝点击