题目


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,2,3...N入栈,每次入栈判断栈顶是否与数组中当前要输出的元素相等,如果相等则出栈(循环)。如果遇到栈满或无法输出数组所有元素的情况则输出No。

代码

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
template < class T >
class AStack {
private:
    int size; // 数组的规模
    T * Array; // 存放堆栈元素的数组
    int top; // 栈顶所在数组元素的下标
public:
    AStack(int MaxStackSize) // 构造函数
    {
        size = MaxStackSize; Array = new T[MaxStackSize]; top = -1;
    }
    ~AStack() { delete[] Array; } // 析构函数
    bool Push(const T& item); // 向栈顶压入一个元素
    bool Pop(T & item); // 从栈顶弹出一个元素
    T Top() const { return Array[top]; } // 查看栈顶元素
    int IsEmpty(void) const { return top == -1; }
    // 检测栈是否为空
    int IsFull(void) const { return top == size - 1; }
    // 检测栈是否为满
    void clear(void) { top == -1; } // 清空栈
};

template < class T >
bool AStack<T>::Push(const T& item)
{
    if (this->IsFull())
    {
        //    cout << "full" << endl;
        return false;
    }
    else
    {
        Array[top + 1] = item;
        top++;
    }
    return true;
}

template < class T >
bool AStack<T>::Pop(T& item)
{
    if (this->IsEmpty())
    {
        //cout << "empty" << endl;
        return false;
    }
    else
    {
        item = Array[top];
        top--;
    }
    return true;
}

int Judge(int M, int N);
int main()
{
    int M, N, K;

    cin >> M;
    cin >> N;
    cin >> K;
    int *yes = new int[K];

    for (int i = 0; i < K; i++)
    {
        yes[i] = Judge(M, N);
    }
    for (int i = 0; i < K; i++)
    {
        if (yes[i])
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }

    return 0;
}

int Judge(int M, int N)
{
    int item[1000], now = 0;
    AStack<int> stack(M);
    for (int i = 0; i < N; i++)
    {
        cin >> item[i];
    }
    for (int i = 1; i <= N; i++)
    {
        stack.Push(i);

        while (item[now] == stack.Top())
        {
            int temp;
            stack.Pop(temp);
            now++;
            if (now == N)
            {
                //cout << "YES" << endl;
                return 1;
                break;
            }
            continue;
        }
        if (stack.IsFull())
        {
            //cout << "NO" << endl;
            return 0;
            break;
        }
    }
    return 0;
}

总结

试了下,好像在读输入的时候同时输出也是可以的。

02-线性结构4 Pop Sequence的更多相关文章

  1. 线性结构4 Pop Sequence

    02-线性结构4 Pop Sequence(25 分) Given a stack which can keep M numbers at most. Push N numbers in the or ...

  2. pat02-线性结构4. Pop Sequence (25)

    02-线性结构4. Pop Sequence (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given ...

  3. 02-线性结构4 Pop Sequence

    02-线性结构4 Pop Sequence   (25分) 时间限制:400ms 内存限制:64MB 代码长度限制:16kB 判题程序:系统默认 作者:陈越 单位:浙江大学 https://pta.p ...

  4. 02-线性结构3 Pop Sequence

    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...

  5. 数据结构练习 02-线性结构3. 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 p ...

  6. 02-线性结构4 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 p ...

  7. PTA 02-线性结构4 Pop Sequence (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/665 5-3 Pop Sequence   (25分) Given a stack wh ...

  8. 02-线性结构4 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 p ...

  9. [刷题] PTA 02-线性结构4 Pop Sequence

    模拟栈进出 方法一: 1 #include<stdio.h> 2 #define MAXSIZE 1000 3 4 typedef struct{ 5 int data[MAXSIZE]; ...

随机推荐

  1. MySQL基础函数

    MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: 系统信息函数: 加密函数: 格式化函数: 一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ...

  2. chromium 34以后中文字体粗体渲染问题

    估计不少人更新后都遇到这个情况了吧,粗体渲染如然变得很模糊,很奇怪,Google下说是字体实现方式变了,国内一些网站用的中文字体都是宋体,但是宋体本身没有粗体,Win下的粗体是微软自己通过某种方式实现 ...

  3. C#通过OpenCL调用显卡GPU做高效并行运算

    GPU的并行运算能力远超CPU,有时候我们会需要用到超大数据并行运算,可以考虑用GPU实现,这是一篇C#调用GPU进行运算的入门教程. 1: 下载相关的库: https://sourceforge.n ...

  4. 微信退款流程,以及在过程中遇见的错误和解决方式(php 语言)

    官方下载demo 1:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 开发步骤  :    https://pay.weix ...

  5. Java基础-Random类(05)

    随机数(Random) 作用:用于产生一个随机数 使用步骤(和Scanner类似) 导包import java.util.Random; 创建对象Random r = new Random(); 获取 ...

  6. .NET Core 使用RSA算法 加密/解密/签名/验证签名

    前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...

  7. c++连接数据库 在vc6.0

    配置相关环境 我的mysql安装路径为E:\mysql-5.5.28-win32所以要在VC中设置include路径和lib的路径. 添加MySql的include目录到VC工作台中Project-& ...

  8. ES6新特性 Class的实现

    ES5之前类的继承是靠原型实现的,而这一过程的实现又涉及到一大堆的原型定义,特别是ES5推出了Object.definePorperty()方法后,代码更加晦涩.但是这种方式正是javascript这 ...

  9. 树莓派链接WiFi设置

    树莓派摆脱网线的束缚 在看这篇文章之前,请确保自己树莓派OS已经正常安装且已经连接网线,然后准备一个无线网卡,开始实现我们的树莓派摆脱网线的束缚吧 ! -_- 一.    安装网卡驱动 1.      ...

  10. Codeforces Round #443 (Div. 2) C. Short Program

    C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...