【NC14326】Rails

题目

Rails

翻译

由于原题是英文的,所以这里先翻译一下:

PopPush市有一个著名的火车站。那里的山地多得令人难以置信。这个车站建于上个世纪。不幸的是,当时资金极为有限。只能建立一条地面轨道。此外,事实证明,火车站只能是一条死胡同(见图),而且由于空间不足,它只能有一条轨道。在这里插入图片描述
当地的传统是,每一列从 A A A 方向出发的火车都会以某种方式重组车厢,继续驶向 B B B 方向。假设从 A A A 方向出发的火车有 N < = 1000 N <= 1000 N<=1000 节车厢,车厢编号依次为 1 、 2 、 … , N 1、2、…, N 12N。列车重组负责人必须知道是否有可能指挥继续往 B B B 方向行驶的列车,使其顺序为 a 1 , a 2 , … , a n a_1, a_2,…,a_n a1,a2,an。帮他写一个程序,判断是否有可能得到所需的车厢序列。你可以假设单节车厢可以在进站前与列车断开连接,它们可以自己移动,直到到达 B B B 方向的轨道上。你也可以假设在任何时候,车站内可以有任意多节车厢。但是,一旦一辆列车进入车站,它就不能回到 A A A 方向的轨道上,而且一旦它离开车站,它也不能回到 B B B 方向。

输入描述

输入由行块组成。除了最后一个块之外,每个块描述了重组的一个序列,可能还有更多的输入。在第一行中,有上面描述的整数 N N N。在区块的每一行中都有 1 、 2 、 … n 1、2、…n 12n 的排列。块的最后一行只包含 0 0 0
最后一个块只有一行包含 0 0 0

输出描述

输出包含与输入中具有排列的行相对应的行。如果可以按输入的相应行所需的顺序对车厢进行编组,则输出中包含 Yes。否则包含No。此外,每块后面有一个空行,对应输入的一个块。在输出中没有对应于输入的最后一个块的行。

思路

虽然题目说了那么多,但归结起来就是一个数据结构基本问题:

给你一个入栈序列 p u s h e d pushed pushed 和一个出栈序列 p o p e d poped poped,判断 p o p e d poped poped 能否由 p u s h e d pushed pushed 经过出栈入栈得到

相信学过数据结构的人对这个并不陌生,学到栈这一章时就基本都是这个问题,但是纸面上的题是用人的思维来判断,动手模拟一下出栈入栈就行了,并且数据量也不大。那怎么用算法解决呢?

首先定义一个栈 s t k stk stk,并定义一个指针 t t t,其初始位置为出栈序列的起始位置,然后遍历入栈序列,先将当前元素入栈,入栈之后循环判断当前栈顶元素是否等于指针 t t t 所指的出栈序列中的元素,如果相等则将栈顶元素出栈,并将指针 t t t 后移一个位置;如果栈为空或者不相等,则继续遍历入栈序列,并重复上面步骤,直至入栈序列遍历完成。此时判断栈 s t k stk stk 是否为空,如果为空,则说明入栈序列经过入栈出栈操作可以得到出栈序列,否则不能。

注意这道题数据输入输出的要求,有点奇怪但是并不复杂,一步一步按要求读入再判断即可。

代码

#include <stdio.h>#define N 1005// 栈和栈顶指针
int stk[N], top;/*** @brief 验证序列 b 是否是合法的栈输出序列** @param b* @param n* @return int*/
int check(int* b, int n) {top = 0;int t = 0;for (int i = 1; i <= n; i++) {stk[top++] = i;while (top && stk[top - 1] == b[t]) {top--;t++;}}return !top;
}int main(void) {int n = 0, a[N], i = 0, flag = 0;while (~scanf("%d", &n) && n) {if (flag) {// 如果不是第一块则先输出空行printf("\n");} else {// 是第一块就不用输出空行,这样能保证最后一块的后面没有空行flag = 12138;}while (~scanf("%d", a) && a[0]) {// 读入数据for (i = 1; i < n; i++) {scanf("%d", a + i);}// 判断序列是否合法printf("%s\n", check(a, n) ? "Yes" : "No");}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/585777.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm013小型企业办公自动化系统的设计和开发+vue

小型企业办公自动化系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对小型企业办公信息管理混乱&am…

OpenCV 4.9使用通用内部函数对代码进行矢量化

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV使用通用内部函数对代码进行矢量化 下一篇&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; ​ 目标 本教程的目标是提供使用通用内部函数功…

反序列化漏洞

常见的反序列化流量特征&#xff1a; 像这种st2 045、068、shiro反序列化、fastjson这些java反序列化一类的流量特征 shiro就看cookie中Rememberme字段&#xff0c;什么都要从这里传 fastjson&#xff1a;可以在提交的包中找找json格式的数据&#xff0c;重点看一下有无rmi或…

QuillEditor无法识别显示含有div和转义字符的问题

在解决前端根据爬取抓过来的数据时&#xff0c;要显示到富文本框中&#xff0c;如下&#xff1a; <div class\"info_cont\" id\"zoomcon\">\n <p><br></p><p style\";text-align: justify;font-family: Calibri;font-size…

C++类设计:一个不同版本的日志类(完整源码)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 如何设计日志类请看&#xff1…

小清新卡通人物静态404源码

源码介绍 小清新卡通人物静态404源码&#xff0c;可以做自己的网站错误页面&#xff0c;记事本修改上传服务器即可 源码下载 小清新卡通人物静态404源码

如何用Git在终端以可视化的方式查看提交情况

2024年4月2日&#xff0c;周二上午 要使用 Git 查看树状提交情况&#xff0c;可以使用 git log 命令的 --graph 选项。这个选项会以树状图的形式显示提交历史&#xff0c;清晰地展示每个提交的分支合并情况和分支间的关系。 git log --graph 除了 --graph 选项外&#xff0c;还…

ZooKeeper 的持久化机制

持久化的定义&#xff1a; 数据&#xff0c;存到磁盘或者文件当中。机器重启后&#xff0c;数据不会丢失。内存 -> 磁盘的映射&#xff0c;和序列化有些像。 ZooKeeper 的持久化&#xff1a; SnapShot 快照&#xff0c;记录内存中的全量数据TxnLog 增量事务日志&#xff…

Java接口与继承实践:Ether通信系统的构建(day16)

创建一个接口Icontroller, 再创建一个接口IReceiver, 创建一个子类实现IReceiver&#xff0c; 创建一个子类实现IContrller&#xff0c; 创建一个类Ether 创建一个Signal类 创建一个类Radiosignal继承Signal 创建一个用户User 最后创建一个Main类 今日总结&#xff1a…

交易所上币:区块链项目上线交易所流程

一、了解交易所/申请上币 在区块链项目上线交易所之前,首先需要对交易所进行充分的了解,包括交易所的基本信息、交易规则、飞BTC5186上币标准等。还需要了解交易所的申请上币流程,以便为后续的操作做好准备。 1.1 选择合适的交易所 在众多的交易所中 飞(BTC5186),如何选择一个…

基于springboot+vue+Mysql的火车订票管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【面试八股总结】传输控制协议TCP(一)

一、什么是TCP协议 TCP是传输控制协议Transmission Control Protocol TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接的&#xff1a;每条TCP连接杜只能有两个端点&#xff0c;每一条TCP连接只能是点对点的&#xff08;一对一&#xff09;可靠的&#xff1a…