首先,l1一定要做完再考虑这些。(不排除出题人太屑了会出一个很复杂的l1最后一道,如果真的看不出来这个时候一定要看榜,不行混个暴力分就撤)
重点
群里的骗分导论一定要看。IOI赛制不会骗分就太惨了。
l2最简单的那个题基本上都是堆,栈等数据结构的应用啦,set的应用啦,并查集的简单应用啦什么什么的。
并查集和set,栈我建议一定要会 。尤其是set作为一个stl的容器记住有啥操作就行。
之后的话对于树 这个数据结构 我认为天梯赛还是挺偏爱的。递归建树,二叉搜索树的判定和操作,堆的手工实现。其实都是树。并查集也是相当多的时间被出。
最后dfs和bfs都考图的遍历也应当有一席之地。
非正统押题
我将几个最近见到的比较难的l2压轴,l3可能会出的题目与算法思路记录下来。
代表本人最近的思想 比较怪异and怪异,建议是最好做完天梯赛练习题目集后收到正统思想熏陶以后的来看一看。
选取依据是 模板算法 和 中等复杂度的数据结构 和 搜索算法 以及一些小优化技巧 。
一类离线算法的查询优化问题
所谓离线算法就是说查询不会影响存储的信息进而影响下一次的查询结果。
这里是借用这个思想的名字,实际很简单
https://pintia.cn/problem-sets/994805046380707840/problems/994805054698012672
PTA L2 - 照片搜索
虽然题目提供的信息很多但是我们所需要的只不过是A 和 B的信息。
如果我们对每一个数据组进行处理,那么我们一定会超时。所以我们只需要含有A和B的进行处理 but A和B是在最后给出,所以我们需要先读取不处理图片,最后读出A和B后开始处理图片。
BFS求最短路
这个问题是一个很emm这么说吧,其实最短路问题从思想上来说就只有一种BFS的解决思路。
当然那种让你搞说有多少个最短路的条数,而且数据量不大的就dfs吧。
也许你学过许多其他的类似DIJ,SPFA ,Floyd等等的最短路算法,但其实归根溯源他的思想都是bfs向下一层遍历,只是“下一层”的选取比较有讲究。当然bfs得知道和会,dij和Floyd的话有条件就背下来,spfa太长了就算了也行。
二分图的最大匹配问题
经典匈牙利算法。也是dfs。有可能会出现。
有向图上的拓扑排序
一直都以为只有khan算法那种从入度出度考虑的拓扑排序,看紫书发现有一种dfs的解决方法:
dfs其实是在天梯赛的出题范围里的,不排除出拓扑排序的可能性。
https://blog.csdn.net/acceptedxukai/article/details/6959882
下面是从入度考虑的算法:
https://blog.csdn.net/weixin_41676881/article/details/100064655
dfs or 并查集求连通块
有关链表类的问题
一般来说,链表的题,你用数组写能拿大部分的分数。当数据过大时,由于频繁的insert 操作会超时。下面介绍一种链表的数组模拟实现。
everyone knows ,能不用指针的修改指向的就不用,所以链表这里我们更加推荐用数组模拟,也就是用一个数组模拟指针的功能,s[N] 存储数据,我们用next[N]表示当前的i的下一个地方在哪。
遍历操作大致如下:
int head= 0; memset( next,-1,sizeof( next); init_list();//TODO 待完成 for(int i=head;i!=-1;i = next[i]){ }