2018暑假集训第一周感想

先额额额掩饰一下尴尬0.....0

本来应该灰溜溜的回家了,但是在张老师明明白白的安排下,有幸地能够跟着集训队一起训练。而在漫长的等待集训开始的时间中,默认已掌握的基础知识没掌握,反倒是联盟升了3级真是惭愧,而当开始做热身题时,越做越发觉自己不会的还有很多很多,这时回想自己那在挂科危险边缘的高数和离散更是越发的惭愧。很多时候经常会陷入这种状况,该好好学的时候没好好学,而当需要时又在为当初而后悔。所以意识到自己在堕落时,不是应该沉浸下去,而是应该苏醒过来。

基础知识还没掌握完,不过集训已经开始了,没办法,要么跟上,要么拉下。

说实话,周一的听课只是听得一知半解,有个概念,关键的掌握还在后面的运用写题。这过程真是挣扎,当自己写出一题时能有种收获的欣喜,但无奈去搜索题解时,又总感觉这不是自己想出来的不属于自己。依赖于百度肯定是不行的,但实在没有思路时又只能去看大佬们的思路,这真迷茫,有时真不知道自己学会没有。但我想最重要的是去理解,光背模板肯定不行的,要去理会其中的逻辑,而能理解大佬的思路,那也能演化出自己的思路,锻炼一种逻辑思维能力。

第一周第一个专题是单调栈,这个感觉还不是很掌握,不过大概是维持一个单调性,像维持一个从左往右的单调递增栈,当到一个数时栈中大于小于它的就会退栈,以此可以找到它左边第一个比它小的数。而单调栈的意义并不是在找一个元素它左右第一个比它大或比它小的元素,而在于一个单调性,很直白。所以意识到需要使用单调栈时,应该由你需要寻找的东西思考到是什么东西需要维持一个单调性,是递增还是递减,并且甚至还有是严格单调(不包含等于)还是非严格(包含等于)单调,并且由单调栈还可以衍生出单调队列等等。

第二个专题是最小生成树,这个感觉主要就是克鲁斯卡尔算法的思想和普利姆算法的思想,Kruskal算法挺好理解,利用到并查集,先将所有边按权的大小由小到大排序,然后看边的连接点是不是已经连通,已经连通了就跳过,没连通就连通起来,直到所有点都连通。而Prim算法这个我用的不是很多,所以也只是大概了解,先是有一个点集来标记已经连通的点,一开始,该点集中只用一个点,然后重复一个过程,找一点在已经连通的点集,另一点不在的权最小的边,然后加入到已经连通的集合中,直达所有点都加入了连通的点集,这个具体的代码实现比Kruskal算法要复杂一点,不过有时也是挺好用的。而由最小的生成树的概念可以推出最大生成树等等。

最后一个就是并查集,这个在寒假时我有接触过一点,不过还是因为自己的懒,没怎么继续学,所以现在得好好学了、、、我个人喜欢叫做归并,因为我觉得就是一个归到根节点,和一个并在一起的过程,当然实际没有那么简单。并查集最关键的首先应该是要搞清楚是以什么来进行并查,简单一点的就是一个个数的集合,而复杂一点的用多种数据成员的结构体,所以搞清楚什么并,以什么为根节点是开始关键的一步。而延伸的有并查集删除操作,这应用到一个映射的思想,当删除一个聚合的一个点时虚拟一个新的具有相同属性的结点来代替它,之后对它的操作就是对新结点的操作。还有种类并查集就是多了个与根节点的关系,在处理这些关系时利用向量的加减法可以更好的理解这些繁琐的过程。

总的来说,模板肯定谁都会背,主要是灵活地去应用它们。在应用的过程中更加深入去了解和掌握。在第一周的训练题中出现了很多的问题,有答案格式看走眼的错误,有超时,有运行时崩溃,也有纯粹的答案错误,不过也掌握了很多之前不知道的东西。像long long能达到10的18次方以上,大数组开在全局,无限大0x3f3f3f,stl容器可能会溢出自己可以用数组模拟,不同的编译系统提交可能会用不同的结果(一个AC一个超时),并查集路径压缩的递归和非递归(递归数据过大栈区崩了时可能会RE)。。。要注意的还有很多,要学的也还有很多,有时一个小细节就可能导致整个代码不同的结果,细心和逻辑也极为重要。

留校的人里一堆计科大佬也有自己院已经参加过竞赛的大佬,有时真是自叹不如,但联盟玩那么久了我还是那个性格,不服输。好好努力,多多总结。

猜你喜欢

转载自www.cnblogs.com/LMCC1108/p/9355932.html