• 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

    AC Code
     1 #include<stdio.h>
     2 //本解法主要思路为逆向放置
     3 //即将测试用例中的数从最后一个开始放置
     4 //如果能在一定容量的堆栈下输出N~1
     5 //将放与取操作取反
     6 //即可满足题意
     7 int main(){
     8   int M,N,K;
     9   int target;
    10   int top;
    11   int data[1001];
    12   scanf("%d %d %d",&M,&N,&K);
    13   int b[N];
    14   int n ;
    15   while(K--){
    16     target = N;
    17     top = -1;
    18     n = N;
    19     while(n){
    20       scanf("%d",&b[N-n]);
    21       n--;
    22     }
    23     n = N-1;
    24     while(n+1){
    25         //printf("%d
    ",top);
    26       top++;
    27       if(top >= M){
    28         break;
    29       }
    30       data[top] = b[n];
    31        
    32       while(data[top] == target&&top >-1){
    33         target--;
    34          //printf("%d",top);
    35         top--;
    36        // printf("%d",top); 
    37       }
    38       n--;
    39     }
    40     
    41        //printf("%d",top);
    42        //printf("%d",target);
    43     if(top == -1){
    44       printf("YES");
    45     }else{
    46       printf("NO");
    47     }
    48     if(K != 0){
    49       printf("
    ");
    50     }
    51   }
    52   return 0;
    53 }

     
  • 相关阅读:
    asp.net页面常见问题
    售后系统用户需求
    asp.net缓存
    xml
    写日志
    事务问题
    Hive之数据类型Array的使用
    mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    Hive之数据类型struct的使用
    从数据仓库系统对比看Hive发展前景
  • 原文地址:https://www.cnblogs.com/jinjin-2018/p/8620761.html
Copyright © 2020-2023  润新知