8-7 苏青训练赛

肥肠煎蛋真的很好吃
如果说你不想看我中间的东西,那就去结尾翻看代码吧

关于一切的开始

------------------------------这是废话,可以不看------------------------------

都是因为我迟到了,差点没完成,但是前几题没写什么算法,所以AC还是很稳的。

最后一题用双指针,也是比较轻松的。

四小时10题,还是头一次写,但是因为考验写码和判断能力,所以显得题目很复杂,毕竟已经很久没有写过这些经典的代码了。

至于我的正确率为什么那么高因为我偷测了几题可以打我了

解题

前话:数据都不大,观察题干和数据可以知道,前几题控制在n^3 或 n^2,最后几题控制在线性,最后一题控制在 n*log n。

这样我就可以顺着话讲。

T1 有多少个山峰

暴力通过。

T2小数的循环节

做到T2感觉不是很熟悉,也让我卡了一会儿。

后来自己演算了一遍除法的竖式,观察余数和商的演变,发现这道题的思路非常的简单。

寻找循环节,只要在之前所有出现过的余数中找出和这一次一样的位置,在输出从这个位置开始到结束的商即可,因为再一次出现这个商(余数),那么必定会得到和之前一样的结果。

问题迎刃而解。

T3 T4 高精度运算

记得乘法加法要写成函数,因为多次调用。

数据很小不用FFT,送给你的暴力。

T5 字母对问题

这道题的数据较大,也让我很害怕。

后来发现这道题需要用容器map,一开始一惊,map的查询和修改是\(O(log\ n)\)的时间复杂度,后来发现\(O(n*log\ n)\) 是可以过十万的数据的,所以就放心的写了。

中间调用substr,方便读取字母对,其他细节见代码。

T6 鞍点问题

暴力通过

T7 约瑟夫问题

这里用一个巧妙的方法:队列模拟环形链

这样避免了数组模拟的各种问题。

T8 T9 找规律

T8 炒股发财是到恶心题,一看还以为是状态机dp,made,想了一会儿写上去发现样例都过不了。

结果发现题目说只进行一次买卖,我就开心的AC了,因为只需要最少的买入,最多的卖出即可。

这样只需要在之前的所有输入内找最小值,再拿当前的数减去最小值即可。

T9 旅游住处是很简单的贪心,但是要特判中间点有两个的情况。

T10 和为定值的数对

由于题目的特殊性,是到原题,所以我直接讲算法

这道题浅看就是一道双指针的题目。

再看数据十万,双指针已成定锤。

但是是无序表,应该排序。所以时间复杂度是\(O(n*log\ n)\)

瓶颈在于排序,双指针线性。

梦的结束

这场比赛结束后,我做了一些自我思考。

由于这场比赛的特殊,事实上我是有运气的成分,否则不可能AK只能拿920分吧

其实在做前面的题目的时候我已经有一点慌了,因为这些题目我已经有半年没有练过了。

再者,两个小时只做了三道题这是不敢有的。

这让我学会在赛时动态调整自己的心态

剩下的两个小时,一鼓作气干掉7道题目,最后一题完成的时候,距离结束只有十分钟。

赛时代码

代码的贴板

posted @ 2022-08-08 09:40  Sankano  阅读(77)  评论(0编辑  收藏  举报