zoukankan      html  css  js  c++  java
  • PAT-甲级-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.

    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
     1 #include <stdio.h>
     2 #include <stack>
     3 #include <stdbool.h>
     4 
     5 using namespace std;
     6 stack<int> st;
     7 
     8 const int maxn = 1010;
     9 int arr[maxn];
    10 
    11 int main()
    12 {
    13     int m, n, t;
    14     scanf("%d%d%d",&m,&n,&t);
    15     while(t--)
    16     {
    17         while( !st.empty() )
    18         {
    19             st.pop();
    20         }
    21 
    22         for(int i = 1; i <= n; i++)
    23         {
    24             scanf("%d",&arr[i]);
    25         }
    26 
    27         int cur = 1;
    28         bool flag = true;
    29         
    30         for(int i =1; i <= n; i++)
    31         {
    32             st.push(i);      //把i压入栈
    33             if(st.size() > m)  //控制栈的容量
    34             {
    35                 flag = false;
    36                 break;
    37             }
    38 
    39             while(!st.empty() && st.top() == arr[cur])
    40             {
    41                 st.pop();
    42                 cur++;
    43             }
    44         }
    45 
    46         if(st.empty() == true && flag == true)
    47         {
    48             printf("YES
    ");
    49         }
    50         else
    51         {
    52             printf("NO
    ");
    53         }
    54     }
    55     
    56     return 0;
    57 }
  • 相关阅读:
    11. Container With Most Water
    9. Palindrome Number
    375. 猜数字大小 II leetcode java
    leetcode 72 编辑距离 JAVA
    73. 矩阵置零 leetcode JAVA
    快速排序 JAVA实现
    63. 不同路径 II leetcode JAVA
    重写(override)与重载(overload)
    62 不同路径 leetcode JAVA
    leetcode 56 合并区间 JAVA
  • 原文地址:https://www.cnblogs.com/leezheng/p/8949962.html
Copyright © 2011-2022 走看看