• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
村雨sup
自己选的路,跪着也要走完 XD
博客园    首页    新随笔    联系   管理    订阅  订阅
PAT 1051 Pop Sequence (25 分)
返回
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


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int m,n,k;
int a[1005] = {0};

int main(){
    cin >> m >> n >> k;
    while(k--){
        int flag = 1;
        memset(a,0,sizeof(a));
        for(int i=0;i < n;i++){
            cin >> a[i];
        }
        for(int i=0;i < n;i++){
            int cnt = 0;
            int fflag = 1;
            int temp = 1005;
            for(int j=i+1;j < n;j++){
                if(a[i] > a[j]){
                    cnt++;
                    if(a[j] > temp) fflag = 0;
                    temp = a[j];
                } 
            }
            if(cnt > (m-1) || fflag == 0){
                cout << "NO" << endl;
                flag = 0;
                break;
            }
        }
        if(flag) cout << "YES" << endl;
    }
    
    return 0;
} 

合法出栈顺序首先得每个数后面不能有多于m-1的数比他小,不然装不下。

其次就是后面比他小的数一定要按递减排列

posted on 2019-09-04 18:47  村雨sup  阅读(233)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3