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

    题目分析

    已知一个栈限制容量最大为M,push操作压入1,2,3...N,已知K个序列,判断序列是否可能是出栈顺序

    解题思路

    1. 1~N依次入栈,在入栈过程中,由p指针指向序列中当前等待出栈的元素
    2. 如果栈顶元素恰好等于序列当前等待出栈的元素,让栈顶元素出栈,p指针后移
    3. 继续循环2的操作,知道栈顶元素不等于序列中当前等待出栈的元素
    4. 继续1~N的压入
    5. 判断是否为出栈顺序
      • 如果压栈过程中栈大小>=M,说明栈满,该序列不是出栈顺序,退出;
      • 如果压栈执行结束后,栈中有剩余元素或者p指针未指向序列末尾,证明该序列不是出栈顺序

    Code

    Code 01

    #include <iostream>
    #include <stack>
    using namespace std;
    int main(int argc,char * argv[]) {
    	int n,m,k;
    	scanf("%d%d%d",&n,&m,&k);
    	int seq[m]= {0};
    	for(int i=0; i<k; i++) {
    		for(int j=0; j<m; j++) {
    			scanf("%d",&seq[j]);
    		}
    		stack<int> sk;
    		int j,p = 0;
    		for(j=1; j<=m; j++) {
    			if(sk.size()>=n)break;
    			sk.push(j);
    			while(!sk.empty()&&sk.top()==seq[p]) {
    				sk.pop();
    				p++;
    			}
    
    		}
    		if(j<=n||!sk.empty())printf("NO
    ");
    		else printf("YES
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    关于let 和 var 的作用域问题
    ES6数组新增方法总结
    Javascript中的async await
    Promise个人笔记---【Promise的前世今生】
    KEIL, MDK 关于C99结构体变量初始化
    C89,C99: C数组&结构体&联合体快速初始化
    13. DMA
    GPIO, AFIO
    27. USART, Universal synchronous asynchronous receiver transmitter
    中断控制及basepri 与 basepri_max
  • 原文地址:https://www.cnblogs.com/houzm/p/12257954.html
Copyright © 2011-2022 走看看