一、题意
A.输入两行由“)”和“(”组成的字符,要求让这两行字符都是输出结果的子字符。(即在输出的结果中可以找到输入的字符,且每个括号字符可以间隔寻找,但顺序不能变。)
B.先输入一组数列的个数,然后输入这组数列,在这组数列中最多去掉一个数字,要求输出从小到大顺序排列的子字符的最大长度。
C.输入数据组的个数,然后输入数据组,每个数据组有三个数字,并计算三个数字之间最小的距离和。
D.一个长度为 n 的序列,每个位置可以跳到 i−aii−ai i−a_{i}i−ai或者i+aii+ai i+a_{i}i+ai,求出每个位置最少需要跳几次。
E.输入一组字符串,然后输出几个字母,从字符串中找到这几个字母所在的位置,把不是这几个字母的字符看作隔板,把字母分成许多部分,求这些部分子字符的个数之和。
F.一个可以上下左右移动的机器人,要求机器人要回到原点,并且路径不能经过重复的路径,求最短的移动方法。
二、非水题AC过程
B.这道题主要是怎么找的问题,感觉和之前一场比赛的题有点像,而且那道题我刚好仔细看过题意,首先要用x[i]表示从左往右遍历,并以i的位置为起点的从左到右的最长连续的递增子序列的长度;用y[i]表示从右往左遍历,以i的位置为起点的从右到左的最长连续的递增子序列的长度,用dp的方法记录,然后用max记录最大长度,最后再从左到右遍历,然后if进行判断(a[i]<a[i+2])(去掉i+1号位置后,如果i号位置为终点的最长递增序列的最后一个数a[i]小于以i+2号位置为起点的最长递增序列的第一个数a[i+2],那么两个递增序列就可以合并成一个递增序列),此时max更新
C.做题思路其实很明确,因为求三个数字的距离最小和,那么可以先把数字排序编号,用if语句判断三个数字的大小情况,从而得出不同的计算距离之和的方法。
E.这道题其实我用的是累加法,首先从字符串第一个开始判断,用if判断字符是不是给的那些字母,如果不是的话就结束判断,用n*(n+1)/2的公式,其中n为符合给的字母的长度,不过也要注意最后一次可能不会自动结束判断,因为最后一个字符合不一定是没有给的,需要注意,另外结果用longlong,int又错了。
三、补题情况
A.这道题好像是CF一场div3的F题,所以我去找了一个这个题的题解,也看了许多AC的程序(不过有一些看不懂,慢慢查找自己看不懂的语句中),有了一点思路,但自己不按答案写的程序还是没过,以后会继续查找原因。
D.严格来说,这道题开始的时候,我没看懂题意,不懂跳位置的方法,课下找了一些程序进行了比较,最后发现我想的太难了一些,找到方法还是可以做的。
F.没做出的题中最可惜的一道,看懂了题意,也有了思路,但程序没写对,也可能是时间不够了,课下补题的时候进行了更改。
四、感想
最大的感想大概是对自己有了一点信心吧,训练之前以为自己最多出两道的,最后出了三道,而且还有一道有了解题的思路,找到了一点感觉,也感到有了一些每天要做的事,感觉暑假会很充实,但在做一些题的时候对于没有思路的题很难有信心做下去,比如A题,知道干什么但不知道如何实现,也不太敢去做,但无论如何还是比较期待明天的比赛。