火车进站问题-HDUOJ

火车进站问题


问题描述

假设杭州东火车站只有一条铁路,并且所有火车都从一侧进来,从另一侧出去。那么,如果火车A先进站,然后火车B在火车A离开之前就进站,那么火车A直到火车B离开后才能离开,可参见下图。
在这里插入图片描述
现在,假设车站中有n(n<=9)列火车,所有火车都有一个ID(从1到n的编号),火车以O1的顺序进站,您的任务是确定火车是否可以按O2顺序出站。

输入

输入包含几个测试用例。
每个测试用例均包含三部分:一个表示火车数量的整数和两个字符串O1和O2,其中,火车的进站顺序用O1串表示,火车的出站顺序用O2串表示。
输入在文件末尾终止,更多信息参见样例。

输出

如果不能从O1的入站顺序得到O2的出站顺序,请输出字符串“ No.”。
如果能够得到,则请输出"Yes."
然后输出进站和出站的具体方式(“in”表示火车进站,“out”表示火车出站)。
在每个测试用例之后输出一行“ FINISH”。
更多信息参见样例。

样例输入

3 123 321
3 123 312

样例输出

Yes.
in
in
in
out
out
out
FINISH
No.
FINISH

思路:火车进站先进后出问题,显然是栈的应用。题目主要的难点是关注,已经进栈的火车什么时候出栈。详细步骤,请查看下面代码中注释。

AC代码

#include <iostream>
#include <string>
#include <stack>
#include <vector>
#include <queue>using namespace std;int main() {int n = 0;// 题目已经说了以文件的结尾为标志,输入很显然以这种形式输入while (cin >> n) {string o1, o2;cin >> o1 >> o2;queue<char> q1, q2;stack<char> st;// 这里要用vector<string>将入栈和出栈的信息保存,因为不一定"Yes."vector<string> v;// 这里采用的是队列的方式,用两个队列分别装两个序列,然后先对第一个队列进行遍历for (int i = 0; i < n; i++) {q1.push(o1[i]);q2.push(o2[i]);}// 对第一个队列进行遍历while (q1.empty() == false ) {// q1非空时,首先要考虑的是已经进行栈中的火车,因为一旦这时候“盖住了”,后面可能就出不来了,而队列中的火车后面再进入都行。if (st.empty() == false && st.top() == q2.front()) {v.push_back("out");st.pop();q2.pop();// 这里的continue很重要,因为我们要保证栈顶的元素和q2队首元素不同时,才继续将q1队首的元素入栈continue;}char ch = q1.front();// 直接判断要入栈的元素(q1队首元素)和q2队首元素是否相等if (ch == q2.front()) {q1.pop();q2.pop();v.push_back("in");v.push_back("out");}else {// 不等时,先进栈v.push_back("in");st.push(ch);q1.pop();}}// q1处理完之后,现在只剩下了栈中的火车和q2了,一个一个比对即可while (st.empty() == false && st.top() == q2.front() ) {st.pop();q2.pop();v.push_back("out");}// 栈不空则比对不上,输出"No."if (st.empty() == false) {cout << "No." << endl;}else {cout << "Yes." << endl;int len = v.size();for (int i = 0; i < len; i++) {cout << v[i] << endl;}}cout << "FINISH" << endl;}return 0;
}

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

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

相关文章

深圳大学第三期“飞鹰计划”正式开班|学以致用,扬帆起航!

金秋九月&#xff0c;丹桂飘香&#xff0c;在这个充满着收获的季节里&#xff0c;迎来了期待已久的深圳大学机电与控制工程学院飞鹰计划2022级第三期开班典礼。受疫情影响&#xff0c;虽然典礼只能在线上举行&#xff0c;但是丝毫不影响电巢专家及学生们的热情。9月17日下午&am…

写了10 年的代码,收藏了这 20 个代码生成框架!

点击上方“Java基基”&#xff0c;选择“设为星标” 做积极的人&#xff0c;而不是积极废人&#xff01; 源码精品专栏 原创 | Java 2020 超神之路&#xff0c;很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数…

matlab偏最小二乘截距,matlab代写偏最小二乘回归(PLSR)和主成分回归(PCR)

原标题&#xff1a;matlab代写偏最小二乘回归(PLSR)和主成分回归(PCR) 原文&#xff1a;http://tecdat.cn/?p2655 此示例显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回归(PCR)&#xff0c;并讨论这两种方法的有效性。当存在大量预测变量时&#xff0c;PLSR和PCR都是对…

水上飞鹰(Z缓存alpha混合)

程序的描述:水上飞鹰(Z缓存alpha混合) 作者:lun 创建日期:2005-10-5 版本:0.1 编译环境:WIN2000 VC6 SP6 DXSDK 驾驶你水上飞艇! 穿越重重危险! 程序下载地址 http://www.wungaonline.com/read.php?tid-100.html

从中关村到纳斯达克,龚宇的奇异8年与爱奇艺的全新时代

十余载岁月风云&#xff0c;视频江湖风起云涌&#xff0c;大浪淘沙后爱奇艺、腾讯视频、优酷土豆三足鼎立之势已成。 北京时间 3 月 29 日晚间&#xff0c;爱奇艺在美国纳斯达克市场敲钟上市&#xff0c;证券代码为IQ&#xff0c;IPO 定价每股 18 美元&#xff0c;照此计算&am…

linux写c语言工具,Linux下用C语言实现推箱子游戏

前面有Linux的常用命令和vim文本编辑器还没有介绍&#xff0c;之后我会补上的。 今天来介绍如何用C语言写一个简单的小游戏&#xff0c;叫做“小老鼠推箱子”。虽然游戏的编写过程不复杂&#xff0c;但是我觉得能够从中找到自己对于编程的不足和完善自己的编程思维是最重要的。…

错别字检测的软件有哪些?自动检查错别字的工具 文字校对 文本纠错 查错别字 校对软件 错别字检查 论文格式 在线校对

我们日常生活中&#xff0c;无论从事什么行业做什么工作&#xff0c;都一定会需要在电脑上打字、写文章文件&#xff0c;而大部分人都难免出现写错别字的情况。这时候就很需要自动检查错别字的软件&#xff0c;来帮助我们快速解决错别字的问题。 爱校对 错别字在线识别检测 错…

如何写好需求文档?

有一天&#xff0c;一位朋友打电话给我。 朋友&#xff1a;“听说你们公司是做产权的&#xff0c;我这有相关的项目&#xff0c;你们能做吗&#xff1f;” 老吴&#xff1a;“我们公司现在不打算接项目了&#xff0c;以做产品为主。” 朋友&#xff1a;“你在公司负责什么啊…

以梦为马,不负韶华|电巢科技延安大学飞鹰计划实习班精彩回顾

时光流淌无声&#xff0c;昨天仿佛还初次见面&#xff0c;今天却又是一年的尾声。你是否结交到亲密的小伙伴&#xff1f;你是否感受到团队合作的魅力&#xff1f;你是否在延大这片沃土得到成长&#xff1f;假如你还没答案&#xff0c;那么看看其他人的回答。 在延安大学&#x…

oracle _读取,oracle中如何读写bold类型的数据

Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据。 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对 blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何…

linux下mysql 大小写敏感 设置

说明&#xff1a; MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的&#xff1a;    1、数据库名与表名是严格区分大小写的&#xff1b;    2、表的别名是严格区分大小写的&#xff1b;    3、列名与列的别名在所有的情况下均是忽略大小写的&#xff1b;…

如何用python读写excel文件_如何用Python读写Excel文件?最便捷的3种方式

python读写excel的方式有很多&#xff0c;这里我介绍3种方式&#xff0c;一种是利用xlrd和xlwt进行excel读写&#xff0c;一种是openpyxl读写&#xff0c;最后一种是利用pandas进行读写&#xff0c;下面我主要介绍一下3种方式读写的过程&#xff0c;实验环境win7python3.6pycha…

基于模型的软件开发方法综述

文章目录 前言1 基于模型的软件开发概述2模型驱动架构2.1 模型驱动的软件体系结构2.2 模型驱动的软件开发步骤 3 建模语言3.1UML3.2 SysML3.3 AADL 4 软件建模工具4.1 Rhapsody4.2 SCADE4.3 Matlab4.3.1 Matlab Coder4.3.2 Simulink Coder 4.4 其他工具4.4.1 Enterprise Archit…

(附源码)spring boot流浪动物救助系统 毕业设计180920

目 录 摘要 1 1 绪论 1 1.1 研究背景 1 1.2国内外研究现状 1 1.3论文结构与章节安排 1 2 流浪动物救助系统系统分析 3 2.1 可行性分析 3 2.2 系统流程分析 3 2.2.1 数据流程 3 3.3.2 业务流程 4 2.3 系统功能分析 4 2.3.1 功能性分析 4 2.3.2 非功能性分析 5 2.4 系统用例分析 …

大气污染扩散模型Calpuff教程

详情点击链接&#xff1a;大气污染扩散模型Calpuff教程一&#xff0c;Calpuff 1.Calpuff模型 2、Calpuff模型基础 3、Calpuff模型下载安装 1&#xff09;Calpro系统安装 2&#xff09;安装环境要求 3&#xff09;需安装的辅助软件二&#xff0c;数据预处理 1.网格设置 …

北大核心期刊2012《科技通报》杂志简介《科技通报》论文范文

北大核心期刊2012《科技通报》杂志简介《科技通报》论文范文 转载▼ 标签&#xff1a; 刘兴 柳林 科技通报 中文核心期刊 动态规划 文化 刊名&#xff1a; 科技通报 Bulletin of Science and Technology 主办&#xff1a; 浙江省科学技术协会 周期&#x…

【论文阅读】社交网络识别影响力最大节点方法综述-05

Vital nodes identification in complex networks 识别单个重要节点的方法基于结构信息一、结构中心性&#xff08;Structural centralities&#xff09;1.度中心性&#xff08;基于邻域的中心性&#xff09;2.四阶邻居信息&#xff08;基于邻域的中心性&#xff09;3.ClusterR…

【论文阅读】基于整合项目反应理论(IRT)的深度神经网络的解析自动作文评分

摘要 作文考试一直以来作为一种衡量应试者的更高等级的能力的方式吸引大家的注意&#xff0c;但是目前在对他们进行评分评定等级的时候有两个主要的缺陷&#xff0c;一是人力成本昂贵&#xff0c;二是存在公平性的问题。作为一种克服这些困难的方式&#xff0c;自动作文评分&a…

JSP基于WEB网上论坛设计与实现(源代码+论文+开题报告+答辩PPT+外文翻译)

cc学院 毕业设计&#xff08;论文&#xff09;开题报告 题 目&#xff1a; 基于JSP的学生学籍管理系统 学 科 部&#xff1a; 信工学科部 专 业&#xff1a; 计算机科学与技术 班 级&#xff1a; 学 号&#xff1a; 姓 名&#xff1a; 指导教师&#xff1a; 填表日期&…

【文本生成】必读论文合集推荐 丨剑桥大学等提出全新的 MAGIC 框架,得到明显优于弱监督模型的文本生成质量

文本生成是自然语言处理中一个重要的研究领域&#xff0c;具有广阔的应用前景。国内外已有如Automated Insights、Narrative Science以及“小南”机器人和“小明”机器人等文本生成系统投入使用。这些系统根据格式化数据或自然语言文本生成新闻、财报或者其他解释性文本。 AMin…