ACM详解(6)——栈

堆栈是一种特殊的线性结构,后进先出,只能对栈顶元素操作,典型的操作入栈和出站。下面通过例子介绍基本用法。
题目:Train Problem
Problem Description
As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the Ignatius Train Station is the fastest all over the world ^v^). But here comes a problem, there is only one railway where all the trains stop. So all the trains come in from one side and get out from the other side. For this problem, if train A gets into the railway first, and then train B gets into the railway before train A leaves, train A can't leave until train B leaves. The pictures below figure out the problem. Now the problem for you is, there are at most 9 trains in the station, all the trains has an ID(numbered from 1 to n), the trains get into the railway in an order O1, your task is to determine whether the trains can get out in an order O2.
Input
The input contains several test cases. Each test case consists of an integer, the number of trains, and two strings, the order of the trains come in:O1, and the order of the trains leave:O2. The input is terminated by the end of file. More details in the Sample Input.
Output
The output contains a string "No." if you can't exchange O2 to O1, or you should output a line contains "Yes.", and then output your way in exchanging the order(you should output "in" for a train getting into the railway, and "out" for a train getting out of the railway). Print a line contains "FINISH" after each test case. More details in the Sample Output.
Sample Input
3 123 321
3 123 312
Sample Output
Yes.
in
in
in
out
out
out
FINISH
No.
FINISH
题目翻译:火车站非常繁忙,火车A先进站,如果火车B在火车A出站之前进站,则或者A只能等或者B出站之后再出站(后进先出)。题目要求有n(n最大为9,编号从1到n)列火车,给出火车进站的序列,并给出火车出站的序列,让你判断这个要求能否实现,如果能实现写出进站(in)、出站(out)的操作序列。
解题思路:基本原则就是后进先出,但是对于特定的火车来说是先进后出。所以首先考虑入栈的序列,在入栈的过程根据出栈序列判断是否需要出栈,如果不需要出栈,则继续进栈,如果需要出栈则进行出栈操作。如果要出栈的元素不在栈顶则表示序列不合法。下面以入栈序列1234和出栈序列1423进行分析。
考虑入栈:1进栈,栈顶元素为1;
考虑出栈:因为栈顶元素与出栈序列中的第一个元素相同,1出栈,出栈后栈中无元素;
考虑出栈:栈中无元素,所以不用出栈;
考虑入栈:2进栈,栈顶元素为2;
考虑出栈:因为栈顶元素是2,而要出栈的元素是4,所以不能出栈;
考虑入栈:3进栈,栈顶元素为3,栈中包括2和3;
考虑出栈:因为栈顶元素是3,而要出栈的元素是4,所以不能出栈;
考虑入栈:4进栈,栈顶元素为4,栈中包括2、3和4;
考虑出栈:因为栈顶元素是4,而要出栈的元素是4,所以4出栈,出栈后栈中元素为2和3,3为栈顶元素。
考虑出栈:因为栈顶元素是3,而要出栈的元素是2,所以不能出栈;
考虑入栈:所有元素已经入栈,所以不能出栈;
无法入栈也无法出栈,而栈中有元素,所以序列不合法。
下面是参考代码:
/*
* Train Problem I
*/
public static String test2(int n,String s1,String s2){
// 记录操作结果
StringBuffer sb = new StringBuffer();
// 表示栈
int[] a=new int[9];
// 表示栈顶元素
int index=-1;
// 入栈元素序号
int index1=0;
// 出栈元素序号
int index2=0;
// 把第一个元素放到栈中
index++;
a[index]=s1.charAt(index1);
index1++;
sb.append("in\n");
// 只要栈中有元素,则处理
while(index1<s1.length() || index2<s2.length()){
// 如果栈顶元素是与s2中的元素一致,则出栈
if(index>-1 && s2.charAt(index2)==a[index]){
index--;
sb.append("out\n");
index2++;
}else if(index1==s1.length()){ // 不能实现
break;
}else{ // 如果否则把s1中的下一个元素加入到栈中
index++;
a[index] = s1.charAt(index1);
index1++;
sb.append("in\n");
}
}
if(index!=-1){
return "No.\nFINISH\n";
}else{
sb.insert(0,"Yes.\n");
sb.append("FINISH\n");
return sb.toString();
}
}
【ACM Reference Format】格式问题详解与修改指南 ACM 提供了严格的格式要求,确保文献引用、页眉、页脚等部分的统一性。本文将介绍 ACM Reference Format 中常见的格式问题,并提供详细的解决方案,帮助您轻松应对这些问题,确保您的论文符合 ACM 的排版标准。推荐的做法是将 ISBN 和 DOI 的值设置为空,而不是直接注释掉相关代码。在使用 ACM-Reference-Format 样式时,您可能会遇到引用顺序与论文中实际引用的顺序不一致的问题。确保将此命令放在文档的导言部分,这样就可以正确显示所需的作者简称。文件)中的排序设置造成的。 阅读详情

相关推荐

ACM简介

一、什么是ACM 计算机协会(英语:Association for Computing Machinery,简称ACM)是一个世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会,亦是现时全球最大的电脑相关学会。 ACM国际大学生程序设计竞赛(ACM-ICPC或ICPC)是由美国计算机协会(ACM)主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。ACM/ICPC 是世界上公认的规模最大、水平最高的国际大学生程序设计竞赛,其目的旨

m0_62021646的博客 1万+

hdu1022:Train Problem (数据结构 栈 递归 dfs【深搜】)

As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the Ignatius Train Station is the fastest all over the world ^v^). But here comes a problem, there is only o

qq_44734876的博客 180

【open judge】【程设】魔兽世界三开战!

#程设 魔兽世界三---开战!--------原以为会很容易ac,没想到写了好久,看来自己的水平还是亟待提高啊!有几个比较有趣的点:1. typeid(#include&lt;typeinfo&gt;)还是比较好用的,特别是本题当战士为wolf,iceman, dragon, ninja时有特殊技能,那么用typeid判断一下就很方便了。2. 对于这种输出很复杂的问题,往往通过使用文件的输入输出再...

weixin_40841416的博客 6073

poj2559 Largest Rectangle in a Histogram 栈

DescriptionA histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different heights. For example, the figure on the ...

Little_boy_z的博客 260

MATLAB新手必看:5分钟搞定直流无刷电机Simulink仿真(附完整模型下载)

本文为MATLAB新手提供直流无刷电机Simulink仿真的快速入门指南,涵盖从环境配置到速度控制闭环实现的完整流程。通过详细的模块选择和参数设置说明,帮助读者5分钟内搭建基础仿真模型,并附赠完整模型下载,助力快速掌握电机控制仿真技术。

efc123456的博客 984

使用 Prometheus 监控 Spring Boot 应用

本文介绍了使用SpringBoot+Prometheus+Grafana实现应用监控的方案。首先在SpringBoot项目中集成Micrometer和Actuator组件,通过配置暴露Prometheus监控端点。接着配置Prometheus采集应用指标数据,并通过Grafana可视化展示。具体步骤包括:1)SpringBoot集成Micrometer;2)配置Prometheus抓取应用指标;3)安装Grafana并导入SpringBoot监控模板;4)展示JVM和业务指标。该方案可以实现对SpringB

蔡定努 431

【 题集 】 【kuangbin带你飞】专题十二 基础DP1

B - Ignatius and the Princess IV Time Limit:1000MS     Memory Limit:32767KB     64bit IO Format:%I64d & %I64 Description "OK, you are not too bad, em... But you can never pass the next te

Joursion 1333

2025小红书爬虫还能活?破解x-s签名+动态Cookie,亲测爬1000条笔记零封禁(附逆向全过程)

上周帮美妆行业的朋友爬小红书“口红推荐”笔记,刚发30个请求就被403,抓包一看x-s签名不对;换Cookie继续爬,爬50条又被封——小红书的反爬这两年简直是“地狱模式”:动态Cookie每10分钟过期,x-s签名算法季度更新,连请求头的User-Agent顺序错了都会被拦。。这篇文章不藏私,把逆向x-s签名的全过程、动态Cookie的维护技巧、1000条稳定爬取的实战代码全给你,连我踩过的8个坑都标出来了(最后附代理池配置,IP零封禁的关键)。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 7410

CSU-ACM2017暑期训练1-Debug与STL E - Train Problem I

E - Train Problem I As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the Ignatius Train Station is the

xiyue_jiang的博客 412

PyQt5数据库开发3 6 QSqlQuery完整实操案例【图文详解】

PyQt5数据库开发3 6.1 QSqlQuery实操案例【多图详解】,本文有点长,主要每一个步骤都有对应的图文教程!!!

qq_53317005的博客 2963

SAP MD09 事务码中的物料需求追溯详解

物料需求追溯是指在物料需求计划中,追踪特定物料的需求来源和满足方式的过程。它帮助企业确定每个需求(如销售订单、独立需求、预留等)是由哪些供应元素(如库存、生产订单、采购订单等)来满足的。通过这种追溯,企业可以了解需求和供应之间的关系,从而优化生产和采购计划,减少库存积压,提升供应链效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1197

acm答案java_java-ACM详解(6)——栈 有答案版 全国软件设计大赛 参考试题

ACM详解(6)——栈收藏堆栈是一种特殊的线性结构,后进先出,只能对栈顶元素操作,典型的操作入栈和出站。下面通过例子介绍基本用法。题目:Train ProblemProblem DescriptionAs the new term com es, the Ignatius Train Station is very busy nowadays. A l ot of student want to ...

weixin_30552495的博客 348

【GEOS-Chem模拟教程第二期下】全球生物质燃烧 GFAS 数据配置

本博客详细介绍全球生物质燃烧 GFAS 数据下载及在 GEOS-CHEM 模型中的配置

WW、forever的博客 1396

ACM算法-栈

经过深思熟虑,小周我想去打ACM,大学生国际程序设计比赛,可是奈何个人实力实在不行,算法这一块实在薄弱,我就想从零开始学习算法,如果有同学想一起学习的可以点下关注,让我们一起去学习。 今天我学到的内容是 数据结构--->栈 原理: 栈:又名堆栈,是一种运算受限制的线性表,限制是:仅仅允许从表的一段插入和删除运算。这一段称为栈顶,把另一端称为栈底。向一个栈插入新元素又称...

周修涵的博客 487

Vins-Fusion 外参camera-imu 标定

Vins-Fusion是一种基于优化的多传感器状态估计器,一大特色是支持实时camera-imu外参校准(相机和IMU之间的旋转)。Vins-Fusion 外参camera-imu校准是利用两帧间计算相机位姿和imu预积分得到位姿,构建最小二乘问题,并通过SVD求解camera-imu外参旋转矩阵。

u010196944的博客 2490

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关于我的大学ACM江湖

文章目录1、引言2、心得与体会3、分享模板 1、引言 大二下学期正式入ACM,大家一看这时间就知道算是挺晚的了,因为我大一比较迷茫,没有在大学加过任何部门,学习也提不上什么劲,大二上开始有了自己的想法,在班上成功竞选上了学习委员,然后我越发积极,在大二上的寒假假期独自在家刷题,目的就是为了蓝桥杯,初赛挺适合新手锻炼的,刷题目的就是为了学校的选拔赛,争取名额,后面当然得到了名额,最后在比赛也取得了省...

超逸の学习技术博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ACM 全部算法总结

ACM 所有算法 数据结构 栈 队列 链表 哈希表 哈希数组 堆 优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平衡二叉树 二叉排序树 线段树 一维线段树 二维线段树 树状数组 一维树状数组 N维树状数组 字典树 后缀数组 后缀树 块状链表 哈夫曼树 桶 跳跃表 Tr...

繁凡さん的博客 5348

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

有关在ACM/ICPC竞赛环境下的GCC/G++的拓栈外挂的研究记录

0、起因 有的时候,DFS总是比BFS受人喜爱——毕竟DFS简单粗暴

HDU_toraoh 5770

linux ACM驱动详解

Module_init中会注册tty_driver,tty_device会在acm usb_driver的probe中注册。 每个ACM设备都由2个Interface组成,第一个interface有一个interrupt endpoint主要负责控制,第二个interface主要负责数据传输,有2个endpoint,有可能是两个int,也有可能是2个bulk。他们都是成对出现的。 比如: 这

知秋一叶 1万+

ACM算法训练【模拟栈,表达式求值】

实际应该先计算1+2。应该用什么数据结构:当然是栈。很简单的题,代码奉上。

大河之犬的博客 494

ACM-栈之Train Problem I——hdu1022

Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18202 Accepted Submission(s): 6819 Problem Description As the new term c

继续激情,继续奋斗。 1544

acm新手小白必看系列之(9)——栈精讲及例题

acm新手小白必看系列之(9)——栈精讲及例题 先进栈后出栈 可以把栈想象成一个上端开口的杯子。。。。 栈只能定义为在一端进行插入和删除操作 1.程序员问题 程序员输入程序出现差错时,可以采取以下的补救措施:按错了一个键时,可以补按一个退格符“#”,以表示前一个字符无效;发现当前一行有错,可以按一个退行符“@”,以表示“@”与前一个换行符之间的字符全部无效。 Input 输入一行字符,个数不超过 ...

永恒之蓝的博客 2149
上一篇: ACM详解(5)——排序
下一篇: ACM详解(7)——压缩与编码
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值