PTA

lvstone-own 2018-11-08 原文

PTA

#include<bits/stdc++.h>
using namespace std;

#define TRUE         1
#define FALSE        0
#define OK           1
#define ERROR        0
#define INFEASIBLE  -1
#define OVERFLOW    -2

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

typedef int Status;
typedef int SElemType;
typedef struct {
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
    S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if (!S.base) exit(OVERFLOW);
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return OK;
}
Status GetTop(SqStack S, SElemType &e)
{
    if (S.top == S.base) return ERROR;
    e = *(S.top - 1);
    return OK;
}
Status Push(SqStack &S, SElemType e)
{
    if (S.top - S.base >= S.stacksize) {
        S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
        if (!S.base) exit(OVERFLOW);
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++ = e;
    return OK;
}
Status Pop(SqStack &S, char &e)
{
    if (S.top == S.base) return ERROR;
    e = *--S.top;
    return OK;
}
Status Empty(SqStack &S)
{
    if (S.top == S.base) return OK;
    else return ERROR;
}
int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    while (n--) {
        string s; cin >> s;
        char e;
        int len = s.length();
        SqStack S;
        InitStack(S);
        int flag = 1;
        int length = 0;
        for (int i = 0; i < len; i++) {
            if (s[i] == 'S') {
                Push(S, s[i]);
                length++;
                if (length > m) { //D第一种情况,栈得最大的容量超过m的栈得最大容量,
                    printf("NO\n"); //输出“NO”
                    flag = 0; //用来记录是否已经通过前面的否定情况给输出了
                    break;
                }
            }
            else { //“X”,先判断是否为空,在判断是否能POp;
                if (Empty(S)) {
                    printf("NO\n"); //如果为空,就要输出“NO”;
                    flag = 0; //在将标记指为0;
                    break;
                }
                else {
                    Pop(S, e);
                    length--; //Pop一个就要栈得容量-1;
                }
            }
        }
        if (flag) { //如果前面的情况都过了,只需要考虑是不是空就好了
            if (Empty(S)) printf("YES\n");
            else printf("NO\n");
        }

    }
    return 0;
}

View Code

7-1 堆栈操作合法性 (20 分)

假设以SX分别表示入栈和出栈操作。如果根据一个仅由SX构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入SX序列,判断该序列是否合法。

输入格式:

输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(50)是堆栈的最大容量。随后N行,每行中给出一个仅由SX构成的序列。序列保证不为空,且长度不超过100。

输出格式:

对每个序列,在一行中输出YES如果该序列是合法的堆栈操作序列,或NO如果不是。

输入样例:

4 10
SSSXXSXXSX
SSSXXSXXS
SSSSSSSSSSXSSXXXXXXXXXXX
SSSXXSXXX

输出样例:

YES
NO
NO
NO

1,需要标记三种不满足的情况,每一种都用一个flag 标记,用一个字符串来存每一串字符,在通过数组的方式来循环读取每一个字符,
判断到“X”的时候要优先考虑是否为空,如果为空就需要直接输出“NO”;在标记一个这个错误已经被排除了,flag = 0;
在删除元素;
2,在读取“S“的时候,要先判断一个当前栈的容量是否已经超过了最大的栈容量,如果超过了最大的栈容量,就需要输出”NO“在标记这个
错误已经被排除了 flag = 0;
3,最后在已经排除了前面的两种情况下,就只需要判断当前栈是否为空就行了,
发表于 2018-11-08 12:03 吕STONE 阅读() 评论() 编辑 收藏

 

版权声明:本文为lvstone-own原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lvstone-own/p/9928302.html

PTA的更多相关文章

  1. PTA 创建计算机类

    6-5创建计算机 (10分) 定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱 […]...

  2. pta 6-7 统计某类完全平方数 (20分)

    6-7 统计某类完全平方数 (20分) 本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数, […]...

  3. PTA(Basic Level)1014.福尔摩斯的约会 && PTA(Advanced Level)1061.Dating

    大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggE […]...

  4. 1025 PAT Ranking (25分) 思路分析 +满分代码

    题目 Programming Ability Test (PAT) is organized by the C […]...

  5. PTA 7-3 编辑距离问题 (30 分)

    一、实践题目 设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括: (1 […]...

  6. 1018 Public Bike Management (30分) 思路分析 + 满分代码

    题目 There is a public bike service in Hangzhou City whic […]...

  7. 『嗨威说』算法设计与分析 – PTA 程序存储问题 / 删数问题 / 最优合并问题(第四章上机实践报告)

    本文索引目录: 一、PTA实验报告题1 : 程序存储问题   1.1  实践题目   1.2  问题描述    […]...

  8. 1017 Queueing at Bank (25分) 思路详解+满分代码

    题目 Suppose a bank has K windows open for service. There […]...

随机推荐

  1. 网络设备 密码、用户级别 AAA授权 的管理

    一.进入 特权模式 密码设置访问网络设备特权模式口令cisco>enable cisco#config […]...

  2. 你不知道的Canvas(二)

    你不知道的Canvas(二) 一、色彩Colors 到目前为止,我们只看到过绘制内容的方法。如果我们想要给图形 […]...

  3. 嵌入式入门 -第1章 学嵌入式从STM32开始

    1.1 STM32简介 ARM公司简介 ARM是Advanced RISC Machines的缩写,它是一家微 […]...

  4. 破解电信光猫华为HG8120C关闭路由功能方法

    昨天电信的工作人员来安装了电信的光纤宽带,使用的是华为HG8120C这款光电转换器与路由器一体机 这导致下级路 […]...

  5. Linux 伪终端(pty)

    通过《Linux 终端(TTY)》一文我们了解到:我们常说的终端分为终端 tty1-6 和伪终端。使用 tty […]...

  6. 查询以太币及代币余额与价格,进行以太币与代币的转账(两种方式)并获取交易记录

    查询以太币及代币余额与价格,进行以太币与代币的转账(两种方式)并获取交易记录 1 // 补齐64位,不够前面用 […]...

  7. 游戏软件开发工具

    目前游戏程序开发工具有很多,在不同游戏平台上有不同的开发工具。在个人计算机上,目前流行的软件开发工具有QBas […]...

  8. 制作移动版Win8系统 – 林夕木大大

    制作移动版Win8系统 两条命令就能在不破坏原有磁盘格局的情况下安装好移动版Windows 8系统,这样简单的 […]...

展开目录

目录导航