2019年华南理工大学春季赛感想

比赛那天早上隔壁宿舍在装修,有毒,吵死了。

拿好了模板和书就去B3那边了。


赛前准备

进去以后安装了Firefox,CodeBlocks和Python3,差不多准备完毕了。

这次有一个新的体会就是要开三个以人名拼音首字母缩写的代码文件,这样不用换来换去,大家一眼就知道谁写的是什么。要是有人多开就在后面加数字或字母自己区分。

我不是很喜欢用文件读入,但是为了和队伍统一我应该迁就另外两个人的习惯。毕竟不是每次的input都可以复制,像徐州赛区那种用PC2的就只能从文件读入。


比赛开始

[A1]

一开始错误认为是数位dp,但先找签到题。

[L]

一开始,潘dalao就找到了签到题“石头剪刀布”,(为了防止我爆零所以由)我上机写,但是我的手速很有问题,还敲错。不过还是2分钟多一点就过了,正常。

AC1

[C1]

莫dalao找到了C,从四个位置按顺序弹出最大的值,我们没想清楚怎么贪心,首先我写挂还交一发,改成正确的错误算法之后又交一发。经过乱打样例偶然发现bug,其实相同的数字,应该优先弹出次高位更大的,次高位相同再依次类推。下机,换潘dalao写炒股。

[I]

一个简单的dp,好像在cf写过,反正潘dalao直接给秒了。

AC2

[E1]

填数独,以为是深搜,我开始写。

[H]

我发现H是求区间每个子区间的gcd的和,那么这个我首先想到的是线段树RMQ。gcd的本质是质因数的min,那么每次枚举一次RMQ就挺好,但其实这样会爆因为没有时间去枚举子区间。
我的错误算法给了潘dalao一个灵感,他说他做过,估计复杂度后他上机写,我继续想C。

AC3

[C2]

潘dalao偶然说到用个大数搞搞C,对比哪个大就哪个优先。他的错误算法给了我一个启发,我仔细推了一下发现应该是字典序。两个都没比较到末尾的情况,字典序越大说明某个位置更大,遂优先度更高。其中一个串是另一个的前缀,那么当然是优先弹出长的那个串,因为长的那个串后面可能会接一个更大的字符,当这个串弹空之后有更多的选择。
由于我写挂了之后都不敢上机了,遂让潘dalao用他的理解结合我的代码写,他用struct之类的操作,一顿瞎搞,通过了我发现bug的样例。提交,AC。

AC4

[E2]

填数独,一道模板题,一开始没找到模板,手写了一半,很亏。潘dalao找到kuangbin模板之后抄上去dedebug就秒了。

AC5

[B]

莫dalao开始弄B了,其实B是不是贪心呢?我不太看得懂。基本不归我管。

[A2]

我又以为是数位dp了,仔细看了是要求LR之间的积product对应的分解,而不是LR之间的积product的个数。
推了一推,经过对大量(水的)数论题的直觉,明显这个积product只能含有2,3,5,7四个因子。(其实还要特判1,多谢潘dalao提醒,WA - 1)
我开始考虑深搜枚举所有的product,直觉认为并不会很多,毕竟只有四个因子可以枚举,而且很快就爆unsigned int的。

[K]

潘dalao把这道后缀自动机的题当成哈希给秒了,潘dalao666!

AC6


封榜

现在只剩下A和B有人在写,莫dalao在写B,我看了看J,把行列式分解之后发现是求最大斜率,告诉莫dalao,他觉得是动态凸包,既然是几何那我又不用想了,太棒了。队友太强了做辅助位真的舒服。

[A3]

经过讨论决定让我上机写A而不是让莫dalao写B,然而我浪费很多时间去实现并debug,实在是对不起莫dalao。

这道题是我这场比赛唯一觉得挺有体验感的题。

下面是递归式丑陋实现的过程,原因在于我很少写这样的题:

1.首先搜索时枚举四个质因子的幂次,需要大量用到他们的幂次,遂预处理,顺手把没用的各因子最大幂次求了出来(其实后面估计空间复杂度用了一下)。
2.写出深搜枚举四个因子的幂次,遇到一个没搜过(忘记给vis打上1,真菜)的幂次组合就push_back(),输出前sort(),F9运行,发现不到7000个。
3.然后想怎么计算一个product有哪些分解呢?第二次深搜枚举各个因子咯。这就传入一个p数组代表2~9的各个因子的幂次。把一些2换成4,8,3换成9,然后2,3一起换成6,最后2,4一起换成8(虽然不知道会不会重复)。
4.把各个因子的幂次缀成字符串,每个字符是'0'+对应幂次,其实最后幂次多于9之后这个字符串鬼知道显示什么。把string插进set里判重。
5.发现每次枚举product要清空set。

6.搞定,知道各个因子的幂次之后弄一个重复元素的排列,抄上了组合数学的假模板,还好潘dalao指出了A排列的求法错误,不然浪费半天时间找。
7.统计,打表,输出到文件。
8.打开另一个文件粘贴表,发现表的格式很不妥,回去修改表。
9.设计一个map来存对应的product,发现很傻叉,修改表为数组(还好打表的时间并不长)。
10.手模了一下发现是l为lower_bound(),r为upper_bound() - 1,经潘dalao提醒要处理得到l=0或者r=0的情况。然后发现1在本题是禁止使用的。

11.计算前缀和,求出答案,贴入样例发现不妥,满的数据出错了。
12.回去修改表,发现是第二次深搜前的预处理,分解质因子的时候分解7忘记改复制粘贴的东西了。
13.打表,贴表,运行,过样例,特判边界。交表,CE,一气呵成。
14.发现CE截断了第二个表的后半部分,意思是其实交一个表是可能可以的,把打表文件的第一个深搜贴过来,又改了几分钟。
15.运行,和之前交表吻合。提交,激动人心之后终于AC了。要不然还要修改打表,不知道弄到什么时候。这时候还剩下25分钟了。

AC7

[J]

莫dalao不写B了,写J。(上次谁拿了JB的一血气球?)我和潘dalao正式挂机,开始复盘了,谈笑风生。
最后莫dalao写挂了,算了无所谓,几何嘛,没有现成板子的确难。


比赛结束

滚榜咯,7题,校赛第6,很满意了,抱大腿得了金牌。


复盘

很多队伍都过了F,可能这个概率dp并不是那么复杂,但是因为一直有更容易出的题写就没开。要是我A写快一点会不会有机会呢?不见得。总之莫dalao在B上花了很多成本,假如我们开了F并想出基本思路,莫dalao可能也不会去写B。

据说B是签到题,谁信啊。

要是下次有难点的题是不是又要被DQ他们爆锤了。

猜你喜欢

转载自www.cnblogs.com/Yinku/p/10703789.html
今日推荐