2023第二届“清华社杯”大学生算法大赛 解题报告(流水账版) | 珂学家

前言

整体评价

有幸参加这场比赛,感觉打出了 最近最好 的状态。

这场比赛题目出的挺有质量的,大概4道easy+easy mid, 4道mid + hard,2道 超级 hard的分布。

比赛中一直“遥遥领先”, 唯一的岔子出在I题,这题卡语言了,哭了,好在最后换c++卡过,最后有惊无险,因为只有2个9题,8题虽然蛮多的,但所幸之前的巨大优势,依旧遥遥领先,^_^。

A. 变化的矩阵

签到题,但是这题有争议,因为输出格式没描述清楚。

其实按照惯例,一般对浮点数的输出,是保留6位小数,当然最好需要spj验证。

B. 吃鸡梦之队

思路: 二分,check枚举交叉构造

挺有意思的一道题,因为要求满足条件的最小值,往往用二分的思路。

这题难在check的逻辑编写,需要枚举大小位,还要枚举每个组成员。

应该对标力扣周赛的T4 hard题,但是这题过的人数有点少,稍有点意外。

C. 洞穴保险

不会做,看了下,感觉和割点割边有点关系,又像网络流,有点怕。

D. 火柴棒等式

思路:模拟+枚举

非常好的模拟题,保证两侧的数字是个位数,满足等式的最小移动次数。

枚举遍历所有的情况即可,大概10*10*10*2,即枚举左侧两项,右侧一项,外加操作符,只要等式相等,一定会有最小操作次数。

这题也能放在力扣周赛的T4 位置。

E. 排列

思路: 找规律,构造

就是1~n的排列,求最大的一个排列,其相邻绝对值的累加和最大。

这题满满CF风,大概是div 2 b题的位子。

这题的解题思路,是按照它给出的一个sample解释,倒推的,很神奇立马就过了。

F. 数组查询

思路:二分

题意有些绕,一开始被带偏了。

这题也算签到题,考察二分的上下界查询。

G. 新冠病毒

签到题,考察一个连续自然数的求和公式

H. 有星星就表白

思路: 基环树

挺有趣的一道图论题,即考察判断连通性的方法,也考察图论的基本性质。除了这些基本的判定外,最后需要额外处理一个基环树环的判定问题。

就是连通性判定,度数判定后,需要使用拓扑排序来解构,如果还有剩下的,那一定是环。如果没有,那就是星星树,可以表白。

赛中,这题莫名其妙栈溢出两次,定位在并查集的find操作,彻底蒙圈了,感觉赛氪对java的栈限制有点小,怎么说呢?并查集find(有路径压缩),在其他oj平台从来没遇到过,T_T。最后换bfs来判定整体图的连通性,才绕过去。

这题也可以对标力扣周赛T4(相对简单的时代)。

I. 笑声比赛

思路:离线计算 + 动态规划(前缀和优化)

这场比赛的意难平,是这场比赛中我解出的题中最难的一道。其实理清头绪花了不少时间,尤其离线计算,融入到动态规划的迭代计算中,这个好像第一次遇到。而且动态规划需要使用到前缀和优化的技巧。

整体的算法时间复杂度为O(26 * n^2 + q),  n=1000, q=10000, 但是不幸的事,TLE。是TLE,而不是WA,说明思路对了,只是时间复杂度不对,或者常数不对。

后续一直在常数级优化,可惜一直是TLE。

感觉这个复杂度是我所能想到的极限复杂度了,那TLE咋办,换语言(因为OJ平台经常卡java),索性切换了c++,最终卡过了。

其实还是蛮后怕的,怕的是切换语言还是不过,可见意难平之深。

这题可以放在力扣周赛的T4(hard中算较难),不过赛中这题过的人数,比我想象中的要多。

J. 行走之谜

若果n为1000,那是一道普普通通的期望题,可惜n为1e5,感觉很典,但是没接触过。

写在最后

感觉这个比赛题目质量还蛮高的,可以和牛客高校比赛一较高下,难度分布很合理,做起来很舒服。唯一的不足,觉得这个OJ还是有点卡语言。

赛后从排行榜来看,感觉有不少的提交有很大问题,稍稍地哀叹一声。

哦对了,这个OJ评测很快,可以说是光速,这真的是额外的小惊喜。

最后祝愿赛氪/清华出版社的比赛组织越来越好,越来越有影响力,越来越多的人关注并参加这项赛事,挺好的。

..

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年12月13日
下一篇 2023年12月13日

相关推荐