首页 > 编程语言 >[JLU] 数据结构与算法上机题解思路分享-第一次上机

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

时间:2024-06-30 22:59:11浏览次数:1  
标签:JLU 输出 上机 10 题解 样例 括号 字符串 输入

前言

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

这里只是思路解析的博客,代码仓库是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

标签:JLU,输出,上机,10,题解,样例,括号,字符串,输入
From: https://www.cnblogs.com/luyaoqi/p/18275489

相关文章

  • abc360_G Suitable Edit for LIS 题解
    题目链接:Atcoder或者洛谷来讲讲纯降智做法,不需要任何智商的做法,顺带整活:对于一个\(LIS\)可以拆成\(preLIS+sufLIS\),而我们现在至多可以修改一个点,那么如果\(preLIS\)的末尾元素为\(x\),\(sufLIS\)的末尾元素为\(y\),那么如果有\(y-x\ge2\),那么我们可以至少找到一个元......
  • C语言 | Leetcode C语言题解之第188题买卖股票的最佳时机IV
    题目:题解:intmaxProfit(intk,int*prices,intpricesSize){intn=pricesSize;if(n==0){return0;}k=fmin(k,n/2);intbuy[k+1],sell[k+1];memset(buy,0,sizeof(buy));memset(sell,0,sizeof(sell));......
  • C语言 | Leetcode C语言题解之第187题重复的DNA序列
    题目:题解:#defineMAXSIZE769/*选取一个质数即可*/typedefstructNode{charstring[101];intindex;structNode*next;//保存链表表头}List;typedefstruct{List*hashHead[MAXSIZE];//定义哈希数组的大小}MyHashMap;List*......
  • LeetCode11. 盛最多水的容器题解
    LeetCode11.盛最多水的容器题解题目链接:https://leetcode.cn/problems/container-with-most-water示例思路暴力解法定住一个柱子不动,然后用其他柱子与其围住面积,取最大值。代码如下:publicintmaxArea1(int[]height){intn=height.length;intans=0;......
  • [题解]CF1716D Chip Move
    思路Part1这种题目应该能一眼看出是DP。我们令\(dp_{i,j}\)表示走到\(j\)这个位置,最后一步花了\(i\)的倍数。那么,我们的方程就很好想了:\(dp_{i,j}=\sum_{k=1}^{j-k\timesi\geq0}dp_{i-1,j-k\timesi}\)。因为,我们走到\(j\)的位置只能走\(i\)的倍......
  • [题解]CF1714F Build a Tree and That Is It
    思路由于题目中说这是一棵无根树,不太方便思考,于是,我们可以假装把这棵树看做有根树。首先我们令\(d_1,d_2,d_3\)分别表示从根节点到节点\(1,2,3\)的长度(不算相交部分)。那么我们可以得到下式:\[\left\{\begin{matrix}d_{12}=d_1+d_2\\d_{13}=d_1+d_3\\......
  • [题解]CF1712E1 LCM Sum (easy version)
    思路这是一道极好的思维题,主要考察了:组合数学和正难则反的方法。这题可以发现如果用直接法将十分的繁琐,于是乎,我们可以用正难则反的方法,即:总的减去不满足的。这道题总的很好求,为:\(C_{r-l+1}^{3}\)。不满足的情况,我们就可以将题目转化为:\(\operatorname{lcm}(i,j,k)<i+......
  • [题解]CF1712D Empty Graph
    思路因为我们枚举的直径是具备单调性的,所以可以使用二分答案。我们可以想一个事情,如果有两个点\(u\)和\(v\),它们两点之间的最短路径要么是直接从\(u\tov\);要么是经过一个中转点\(t\),即:\(u\tot\tov\)。然后,我们可以发现一个显然的规律,就是\(t\)一定是区间\(a\)中......
  • [题解]CF1704D Magical Array
    题意给定\(n\)个长度为\(m\)的数组,对于每一个数组选择下面任意一种操作进行若干次(操作二只能被一个数组选出)。\(c_{t,i}-1,c_{t,i-1}+1,c_{t,j}-1,c_{t,j-1}+1\)。\(c_{t,i}-1,c_{t,i-1}+1,c_{t,j}-1,c_{t,j-2}+1\)。最后输出选择操作二的数组......
  • [题解]CF1665E MinimizOR
    思路发现\(2^k\)大的数,最终的答案一定由前\(k+1\)小的元素组成。考虑数学归纳法,显然当\(k=1\)成立。假令\(k'\)时成立,证明\(k=k'+1\)时成立即可:若第\(k\)位有两个及以上的\(0\),显然最终答案的第\(k\)位一定为\(0\),因此考虑前面的\(k-1\)位,显然取......