暑假嗨一训练总结

一、题意

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题,知道干什么但不知道如何实现,也不太敢去做,但无论如何还是比较期待明天的比赛。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值