前言
于是又是一年省赛结束了,本来去的时候信心满满,奈何满场数学题着实太坑,只能拿个银牌滚蛋了。虽然很不甘心,但是毕竟自己和队友的数学水平也就那样,没什么可抱怨的,事实上已经发挥得很不错了——如果不算那三个脑抽的笔误,其实六道题都算是1Y的。只可惜某道高中水平的排列组合问题居然没推出来,实在是有些遗憾。按照顺序写个流水账总结一下吧,最终rank在这里。
热身赛
第一次看到热身赛出现RP题目的,B题题意是输出一个1-20之内随机数,能不能与答案相符就要看RP了。本来上来想一个一个来枚举,但是队友说可能是Special Judge,于是写了随机数。但是交了N多发还是没过之后不得不改成枚举。最终跪了40发才过,呵呵,好攒人品……
A题是个裸的筛法求素数的问题,但题给出错了,数据规模大到了10^9,但是实际上大于10^7的数据当作10^7来考虑就可以,因为数据本身有错。当时纠结了将近两个小时,因为理论上不存在什么算法可以快速确定这么大的范围内有多少素数,只能说这题仿佛在逗我……
正式赛
E题
水题一枚,就是求阶乘。由于比赛刚开始的时候误删了先前热身赛打好的初始模版,于是这题拼手速没拼过人家,略不爽……
F题
求一颗满二叉树上两个节点的最短距离。利用二叉树的性质,只要两个节点一直向根节点回溯,直到有共同的根节点就是最短路径。也就是哪个节点编号大就除以2,直到两个数相等,记录操作了多少次即可。非常水的数据结构,但是由于把#ifdef写成了ifndef,导致提交的代码重定向了输入,结果TLE了一发。杯具!
A题
很水的计算几何题目,队友推出了公式,直接代入计算即可。不过那个二货在算三角形面积的时候忘记除以2了,于是我俩查了半天推导过程,好在交上去之后1Y。
J题
这题真是典型的吓死人不偿命,题目的数据规模在1kw级别,要求给出一个O(n)的算法,但是实际上判题机器的性能相当好,直接排序水过就可以。问题是我和队友之前也试验过排序的IO性能,以为这题就是专门卡排序的所以不敢写,结果居然逗逼到没有写多组输入就交了代码,跪了两发之后才意识到。只能说这题是被数据规模给吓怂了,其实可能可以证明不存在O(n)的算法吧……
D题
其实我上来就读到这题了,当时第一反应是觉得这是线段树区间加减的问题,但是跟孙茂胤说了思路之后被否掉了,于是就没敢写。后来把J题搞掉之后在B、G两道数学题上卡了得有两个小时,毕竟我们队的数学实在是太捉鸡了,觉得真是没法搞了,就开始重新想D。这时候我再仔细想了下,发现之前是孙茂胤想错了。于是又跟蒋公说了下题意,他建议用记录时间戳的方式来计算,这时候我才意识到这是个区间替换问题而不是区间增减。于是上手开始敲,中途因为一个标记更新的问题debug了一段时间,最后还是在蒋公的建议下修改了代码添加了个判断条件,交上去1Y,稍微为我们挽回了点颓势。虽然直到比赛后我才想明白为什么要这样加判断条件……
B题
这是本场搞出的最后一个题目,当过了线段树那个题之后我们已经只能对着三道数学题干瞪眼了,这时候孙茂胤建议开始瞎搞——用随机算法试试B题能不能打表,于是很快地我们就写出了一个简单的随机求期望的程序。跑随机算法的结果显示,这个题目所求的期望还是大概可以算出来的,虽然从第三位开始精度就有问题,但是能够看出它具有很明显的规律性。当算了大概四组数据之后,我们发现这题的规律简直是坑爹——就是x*(n-x)而已,结果甚至就是整数!虽然看起来它非常不靠谱,但我还是飞快地敲上代码,提交之前还商讨决定要是过了的话孙茂胤就请客。而当提交之后看到那个几乎立刻返回的绿色Yes之后,我们总算是松了口气——总不至于又打铜了……
H题
这道题我也是很早就读了,当时立刻就有了思路:枚举任意两对点连线就行,答案应该直线数量的两倍。跟孙茂胤说了想法之后他说会存在三点甚至多点共线的情况。后来我想到这个可以考虑用set记录直线的斜率来去重就可以,但是由于剩下的时间太短,还是决定试着搞G题,毕竟是道数学题,如果有想法的话很快就能写出代码。只可惜,到了最后G题也没能搞出来,于是这场比赛就这么结束了。
总结
这次省赛依然没有拿到金牌,当然也没有浪潮的实习Offer。虽然还是比较遗憾,但是毕竟谋事在人成事在天,我自己本身就不擅长概率论和组合数学,也不搞这类东西,而某数院队友的数学水平又不靠谱,所以碰上这套题也实在是没有办法的事情。抛开那三道整整卡了我们全场的数学题来看,我们整场的发挥还是相当不错的,该过的都过了,原本搞不出来的也瞎猫撞上死耗子给乱搞出来了。不过如果最后选择了H题的话,也许会是一个更完美的结果也说不定。