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

    分析

    对每组给的数据进行遍历,遇到一个数num,首先说明1到num都已经进堆了,要不然是不可能弹出n的,所以把1~num未进堆的所有数进堆,在进堆的过程中如果堆已满了,却依然要进堆,说明这组数据错了;用t记录进堆中最大的数,这样下次就不用从1~num中找未进堆的再进堆了,直接从t+1~到num进堆,然后pop一个出来,如果pop出来的和num不等,就错了,否则继续遍历,执行前面的动作。
    
    #include<iostream>
    #include<math.h>
    #include<stack>
    using namespace std;
    int main(){
    	int cmax,n,k,num=0;
    	cin>>cmax>>n>>k;
    	for(int i=0;i<k;i++){
    		int flag=0,t=0;
    		stack<int> s;
    		for(int j=0;j<n;j++){
    			cin>>num;     
    		    for(int i=t+1;i<=num;i++){
                    if(s.size()==cmax) flag=1;
    		        s.push(i);
    		    }
    		    t=max(num,t);
    		    if(s.top()!=num) flag=1;
    		    s.pop();
    		}
    		if(flag==1) cout<<"NO"<<endl;
    		else cout<<"YES"<<endl; 
    	}
    	return 0;
    }
    
  • 相关阅读:
    poj 1328 Radar Installation (贪心)
    hdu 2037 今年暑假不AC (贪心)
    poj 2965 The Pilots Brothers' refrigerator (dfs)
    poj 1753 Flip Game (dfs)
    hdu 2838 Cow Sorting (树状数组)
    hdu 1058 Humble Numbers (DP)
    hdu 1069 Monkey and Banana (DP)
    hdu 1087 Super Jumping! Jumping! Jumping! (DP)
    必须知道的.NET FrameWork
    使用记事本+CSC编译程序
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/8330896.html
Copyright © 2011-2022 走看看