ACM详解(6)——栈

我的ACM脚印 2020年12月20日,南京区域赛结束,同时结束的,还有我的两年多的ACM生涯 接下来的寒假重心会向着找实习的方向努力,当然明年还有线下的区域赛、EC-finial以及明年的省赛等等,我都会去认真准备。 这篇文章会写什么 关于我 我的ACM简单的回顾 我的ACM成绩 写给新人 ACM到底和数学建模、挑战杯等等的其他竞赛有什么区别 ACM到底带给我什么了 为什么要打ACM 什么样的人适合去打ACM,什么样的人不适合去打ACM 写给已经进入了ACM的人 我在ACM的训练计划 除了ACM之外的计划 阅读详情
堆栈是一种特殊的线性结构,后进先出,只能对栈顶元素操作,典型的操作入栈和出站。下面通过例子介绍基本用法。
题目: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

操作系统期末大题类型题解

额,OS主要这回考程序分析题,PV操作、生产者消费者啊,哲学家进餐问题,死锁问题啊,如何避免死锁,经典银行家算法,页面置换算法啥的,磁盘调度......总计还有很多,就不一一说了 PV操作 谈到PV操作,首先要了解什么是信号量,其实就是用来解决互斥与同步问题的,分为原语wait(S)和signal(S),也就是我们常说的PV操作,在这里给出王道上的概念 wait(S){ while(S>0) S=S-1; } signal(S){ S=S+1; } 记录型信号量

ZXxxiaoxuan的博客 795

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

FPGA可重构技术

介绍FPGA 可重构技术的实现方法,包括全局重构和部分重构

航天领域资深码农,型号经验丰富,一线干货分享 1989

字节跳动程序媛教你如何刷算法题:面试手撕代码我就没怕过

本人上一次刷题还是大一的C语言期末考试……但是面试中算法考核截止上岸前一直保持着100%正确率的光辉记录。 本文将给你指明一条刷题的决胜指南。并从算法的重要性、题库的选择以及刷题的三大步骤分别进行讲解,彻底解决你所有关于面试算法所有的困扰。

Stay Hungry Stay Foolish 求知若饥 虚心若愚 2万+

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

Visual MODFLOW Flex 6.1新手入门:从数据导入到3D建模的完整工作流解析

本文为Visual MODFLOW Flex 6.1新手提供了从零开始构建地下水数值模型的完整工作流指南。详细解析了从项目规划、数据准备与导入,到构建三维概念模型、生成并运行数值模型,直至结果可视化与校准的核心步骤。帮助水文地质与环工领域初学者快速掌握这一专业软件,高效完成从数据到三维建模的全过程。

a1b2c的博客 809

2.STL Practice

2.STL PracticeA - {A} + {B} HDU - 1412 (set)B - Train Problem I HDU - 1022 (stack)C - Alice, Bob and Candies CodeForces - 1352D (deque)D - Let the Balloon Rise HDU - 1004 (map)E - 全排列 51Nod - 1384F - 水果 HDU - 1263 (map嵌套)G - Running Median HDU - 3282(优先队列)

qq_52008247的博客 4891

在windows10/11中使用ipatool提取苹果app安装包ipa文件

本文介绍了在Windows10/11系统中使用ipatool工具下载苹果App安装包(.ipa)的详细步骤。首先需准备Windows电脑、AppleID账号并下载ipatool工具;具体操作包括:登录AppleID、搜索应用、获取购买授权、查看历史版本及下载指定版本。关键步骤强调获取授权的重要性,并提供了常用命令速查表,帮助用户完成从登录到下载的全过程。该教程适用于需要获取旧版本App或进行应用测试的场景。

zhengshaolin128的博客 2597

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

AI Agent的知识蒸馏链:多阶段LLM模型优化

随着大语言模型(LLM)规模的不断扩大,如何在保持模型性能的同时提高其部署效率成为关键挑战。本文旨在探讨通过知识蒸馏技术构建多阶段优化链,实现LLM模型的高效压缩和性能优化。研究范围涵盖从基础理论到实际应用的完整知识蒸馏流程,特别关注AI Agent场景下的特殊需求和解决方案。本文首先介绍知识蒸馏的基本概念和背景,然后详细阐述多阶段蒸馏链的核心原理。接着,我们将深入探讨算法实现细节和数学模型,提供完整的代码示例。最后讨论实际应用、工具资源和未来发展方向。

AI大模型应用之禅 353

ACM算法-栈

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

周修涵的博客 487

40、5G NR射频要求解析

本文详细解析了5G NR射频相关要求,包括参考灵敏度与动态范围的定义、接收机对干扰信号的抗扰性要求(如阻塞、邻道选择性等)、辐射射频要求在FR1和FR2频段的差异,以及多标准无线电基站(MSR)的发展及其对射频要求的影响。内容涵盖测试模型、干扰场景、具体指标和实现挑战,为理解和应用5G NR射频规范提供了全面指导。

qsc901234的博客 245

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

关于我的大学ACM江湖

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

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ACM 全部算法总结

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

繁凡さん的博客 5351

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

有关在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。应该用什么数据结构:当然是栈。很简单的题,代码奉上。

大河之犬的博客 495

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 输入一行字符,个数不超过 ...

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值