[JLU] 数据结构与算法上机题解思路分享-第一次上机 吉林大学

前言

首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。

这里只是思路解析的博客,代码仓库是JLU_Data_Structures_Record

希望你能在这里找到你想要的:)

正文


A 调皮的哈利

分数 30
作者 朱允刚
单位 吉林大学
贝蒂是个打字高手,打字时有不看屏幕的习惯。在一次贝蒂打字时,调皮的哈利常常趁贝蒂不注意按下Home键、End键、左右方向键和退格键。当Home键被按下时,输入光标会跳到文本最开头;当End键被按下时,输入光标会跳到文本末尾;当左/右方向键被按下时,输入光标会向左/右移动一位;当退格键被按下时,输入光标左面的一个字符会被删除。现给出贝蒂和哈利按键的字符串,其中'{'表示Home键,'}'表示End键,'<'表示左方向键,'>'表示右方向键,'#'表示退格键,其余字符均表示输入的内容,请输出屏幕上最终显示的文本。

img.jpg

输入格式:
输入一个字符串,长度不超过5×10
4
,包含大小写字母、空格、下划线、{、}、<、>、#,表示贝蒂和哈利的按键序列。

输出格式:
输出为屏幕上最终显示的字符串。

输入样例1:
jlu_cc{i_love_}st

输出样例1:
i_love_jlu_ccst
输入样例2:
stre<<aaa

输出样例2:
staaare
输入样例3:
xxx>>>yyy##z<<>k

输出样例3:
xxxykz
输入样例4:
abcd{efghi}jklm{nopq}rs{t}uvwxyz

输出样例4:
tnopqefghiabcdjklmrsuvwxyz
代码长度限制
16 KB
时间限制
25 ms
内存限制
10 MB


从题目可以知道,题目要求对于内部的数据结构有着频繁的更改,所以在我们已知的数据结构中,可以考虑采用链表来进行实现。

同时也能注意到,对于字符串的处理,有一些如同转义字符一样的特殊字符,将这些特殊字符的处理编为函数,也是一个不错的选择。

此外,也建议想象自己操纵着光标,输入时向光标左边插字,删除时删除左边的字这样。


B 括号匹配

分数 20
作者 朱允刚
单位 吉林大学
请编写程序判断一个包含“(”和“)”的括号序列是否匹配。如匹配则输出Match;如不匹配,计算出使该序列变为匹配序列所需添加的最少括号数目(只允许在该序列开始和结尾处添加括号),并输出经添加最少括号后得到的合法匹配序列。

输入格式:
输入为若干行,每行一个字符串,包含不超过10 ^ 5个括号。输入行数不超过10行。

输出格式:
对于输入的每个括号序列输出1行或2行信息。若输入的括号序列匹配,则输出Match。若不匹配,则输出分为2行,第1行为一个整数,表示将该序列变为匹配序列所需添加的最少括号数目,第2行为一个字符串,表示经添加最少括号后得到的合法匹配序列。

输入样例:
(())()
)(
()))((

输出样例:
Match
2
()()
4
((()))(())

代码长度限制
16 KB
时间限制
20 ms
内存限制
10 MB


该题目与课内某题很像,通过栈记录匹配与否,再实现补充即可

由于全是小括号,基本不用考虑在哪里补充,缺几个左括号就直接向左补,缺几个右括号直接向右补即可


C 表达式求值

分数 30
作者 朱允刚
单位 吉林大学
给定一个中缀表达式,请编写程序计算该表达式的值。表达式包含+、-、*、\、、(、),所有运算均为二元运算,操作数均为正整数,但可能不止一位,不超过10位。运算结果为整数,值域为[−231,2^
31)。除法运算结果若为小数则进行截尾取整。若除法运算中除数为0,则输出INVALID。幂运算须自行实现,不允许调用pow等系统函数。测试数据保证幂运算中指数为非负,底数不为0。

输入格式:
输入为多行,每行为一个长度不超过1000的字符串,表示中缀表达式。

输出格式:
对每个表达式输出一行:为一个整数(表达式的值)或为一个字符串INVALID。

输入样例:
5+(102)-6
8
(999+1)
1+5/(1-1)
7*2^3

输出样例:
19
8000
INVALID
56
代码长度限制
16 KB
时间限制
50 ms
内存限制
64 MB


经典的中缀表达式转后缀表达式,基本与课本一样,不过需要快速幂来减少时间消耗,毕竟只有50ms嘛

陆爻齐采用了专门的函数判断符号优先级,是否为括号的函数来事得程序条理更清晰些,为了省事,或许能够统一个函数,直接用数字区分类别,不过更耗点脑子罢


D EDG

分数 20
作者 朱允刚
单位 吉林大学
2021年11月6日,英雄联盟全球总决赛打响,中国电子竞技战队Edward Gaming(EDG)以3:2力克韩国强敌DWG KIA(DK)战队,历史上首次夺得全球总冠军。一时间全网沸腾,大家纷纷在社交平台上直呼“edgnb”。现给定一段文本,请编写程序识别出连续的k个“edgnb”组成的字符串在该文本中出现了多少次。

输入格式:
第一行为1个整数T,表示数据组数。对于每组数据,第一行为1个字符串,表示给定的文本。第二行为1个整数k,含义如题目所述。(1≤T≤10。各组数据给定的字符串长度之和不超过10
5
,且字符串中只包含a-z的小写字母。k≥1且k×5小于给定字符串长度)。

输出格式:
对于每组数据输出一行,为1个整数,表示所求的出现次数。

输入样例:
5
xyzedgnbabcedgnb
1
xyzedgnbabcedgnb
2
defedgnbedgnbxyz
2
edgnbedgnbedgnb
2
fxedgnbedgnbedgnbedgnbmem
3

输出样例:
2
0
1
2
2

数据规模:
测试点0:5≤T≤10,400≤T个字符串长度之和≤500,k=1
测试点1:5≤T≤10,400≤T个字符串长度之和≤500,k≥1
测试点2:5≤T≤10,4000≤T个字符串长度之和≤5000,k≥1
测试点3:1≤T≤3,90000≤T个字符串长度之和≤100000,k≥1
测试点4:1≤T≤3,90000≤T个字符串长度之和≤100000,k≥1

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB


这个题的实质是从字符串中匹配符合的字符串,而且不单单是匹配单个edgnb出现次数,而是可能变长的。只要理解了这一点,接下来只要实现经典的kmp就成功了。

你问kmp是什么?我也不知道捏(毕竟过去一年力

小结

这次上机实验主要考察了对链表、字符串匹配和操作,思考量肯定是有的,不过这里面很多东西我确实还是没有理解啊,纵使当时写下来了,现在也全忘了,hhh

posted @ 2024-06-30 22:54  陆爻齐  阅读(5)  评论(0编辑  收藏  举报