题目


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. BootStrap教程完整版

    http://www.runoob.com/bootstrap/bootstrap-navbar.html

  2. android 统计启动时长,标准

    一.启动的类型 冷启 动,application没有被创建,需要先创建进程,然后启动MainActivity.由于这个过程需要fork一个新进程,所以耗时. 热启动,同上面对照,已经启动过applic ...

  3. vuex的简易入门

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  4. 在EF中正确的使用事务

    1.EF中使用事务: using (TransactionScope tran = new TransactionScope()) { try { using(var _context = new D ...

  5. 学习UML --用例图

    用例图用于描述系统提供的系列功能.使用用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的功能需求.用例图对系统的实现不做任何说明,仅仅是系统功能的描述. 用例图主要在需求分析阶段使用,用于描述 ...

  6. Shape of HDU

    Shape of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. VMware三种网络模式

    VMware网络配置详解一:三种网络模式简介安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口,这些后 ...

  8. HQL语法

    HQL:Hibernate Query Language HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征. $下面介绍HQL语句的语法 1.from子句 from Person 表明从P ...

  9. Windows下caffe的配置和调用caffe库(一)

    一.Windows下caffe的配置: 1. 下载caffe官网提供的开发包,https://github.com/microsoft/caffe 2. 将caffe-master目录下的Window ...

  10. 学习笔记TF060:图像语音结合,看图说话

    斯坦福大学人工智能实验室李飞飞教授,实现人工智能3要素:语法(syntax).语义(semantics).推理(inference).语言.视觉.通过语法(语言语法解析.视觉三维结构解析)和语义(语言 ...