第97章 实用主义(2/2)
宋宸卿发现,这题里面藏的暗坑还不少。如果不是他,是一般人,估计早就栽进去了。
哼哼,现场应该没有人做得比他快吧?宋宸卿点下提交,得意地环顾了一下四周,尤其重点望向左前方的位置。
当然,以比赛机位之间相隔的距离,他也看不到什么內容。只见洛北还在对著屏幕敲敲打打,觉得一股优越感冒上心头。
傻了吧,小样儿。就算是沧海杯省赛这种水赛,也够你这种门外汉喝一壶的o
宋宸卿不会知道,现场还真有人比他快,而这个人,就是他暗自揣测要喝一壶的“门外汉”。
在“实用主义”的buff下,洛北只觉得思路清晰,状態绝佳,前所未有。
代码隨著键盘的敲击而跳动,灵感不断涌现,根本停不下来。
第一题,kill。第二题,kill。第三题,kill,kill,kill,洛哥来了全都杀了。
就在宋宸卿琢磨著优化第四题团建问题时,洛北直接视题目的陷阱於无物,横衝直撞碾压过去了。他脑海中首先浮现的想法,直接就是最优思路。
不过就是深度优先遍歷同步比较两棵树的路径,通过適当的哈希处理和提前剪枝,把时间复杂度压到0(n+m)级別。
写完,提交,然后是第五题,没有丝毫停顿。
“小沧班上有n人,一次考试后他想统计全班人的成绩,已知第i名同学的成绩为ai,当小沧统计完前名的成绩后,他可以从1—任选k名同学,计算他们成绩的方差。小沧至少要检查多少个人的成绩,才可能让k名同学的方差小於一个给定值t?
“”
看著很长的一串文字和公式,但在洛北眼中,关键信息被瞬间提取出来了。
脑內数学建模,完成。
拿过一张草稿纸,洛北在纸上推出方差<t的表达式。式子略复杂,但是难不倒继承了大师级“做题家”全部特性的,“学者”天赋的持有者。
很快,他得到了一个化简后的不等式。紧接著,洛北根据这个推导式,马上构造出检查方差是否满足条件的check函数。
接下来,要做的事情就很简单了:
先把数组的前个元素复製到新数组b里面並排序,再根据化简后的不等式来计算前缀和、前缀平方和。最后检查所选的k个成绩是否满足条件,使用二分查找,调用check()函数加速搜索————
整个思路,行云流水,一气呵成。几十行代码就搞定了。洛北不假思索地提交第五题,直奔最后一题,因数计数。
因数计数,是这次省赛a组的压轴题。这道题的题面很短,和数学的关联性却不小:“小沧有含n个正整数的数组{an},定义一个整数对(1,y)是另一个整数对(
2,y2)的因数,若且唯若1y1分別是2y2的因数。他想知道有多少个有序四元组(i,j,k,i)满足(ai,aj)是(ak,al)的因数,其中i,j,k,i互不相等——”
这是一道结合了数学推理的算法题。需要预先推导因数关係,然后枚举四元组。
如果参赛选手的数学基础不够扎实,最容易想到的思路就是暴力求解。但强行硬算,隨之而来的超高的时间复杂度0(4),按照题目给的测试用例范围,最多只能拿到3040分。
洛北当然不会这样做。
这道题,对他来说,思路其实依旧很清晰:因为只用计算四元组的个数,不用计算具体是哪些四元组。所以,可以直接考虑数论中的容斥原理,运用排列组合,先计算出基本因数对数,再排除重复和无效情况,就可以得到最终的结果。
“实用主义”,恐怖如斯。在这个特性的辅助下,洛北总能灵感爆棚,直接找到那条最高效的路径。
紧接著,就是將思路贯彻为实际了。
思路一通,代码就如潮水般涌现。啪咔啪咔啪咔————即使是最便宜的薄膜键盘,在洛北手中,同样是飞花摘叶可杀人的码字神器。
十五分钟后,最后一行代码完成了。洛北的手指在回车键上轻轻一敲,点下確认。
提交。
接下来,就交给官方后台的评分机器判断吧。