为了深入贯彻党的二十大提出的构建新一代信息技术、人工智能增长引擎,加快发展数字经济,促进数字经济和实体经济深度融合.打造具有国际竞争力的数字产业集群的政策方针,同时积极响应教育部、国家发展改革委、财政部三部委发文加快人工智能领域人才培养的文件精神,中国电子学会现代教育技术分会决定联合清华大学出版社等单位面向全国高等学校在读全日制研究生和大学生举办2023第二届“清华社杯”大学生算法大赛,旨在促进大学生学习计算机领域专业知识与技能的兴趣,邀发大学生在信息技术和人工智能的算法编程领域勇于发现问题、提出问题和解决问题,有效提升算法设计、逻辑推理、数学建模、编程实现和计算机系统能力,培养团队合作意识、挑战精神和创新能力。
体验极差
抛开这个比赛本身不谈,我觉得这场比赛就是依托答辩。
明面上都第二届了,却给我一种办赛水平甚至不如蓝桥杯周赛。
题面描述不清
整套题不止一处题面描述不清。
A 题
整场比赛最大的锅。
A 作为一个签到,却成了通过率最低的题目(题面没改前)。小于 10% 的通过率,我愿称之为算法竞赛有史以来最有“实”力的签到题。
显然答案会是小数,题面却不说保留几位小数。
样例也恰好给一个答案为整数的数据。
要不是我赛时想到了,不然我还真以为出题人埋了个好坑:
- 因为题目的特殊性,所以结果的小数部分只可能是 0.5,0.25,0.75 中的一个,所以特判一下就可以了。
但是我这样写没过。
那就是纯纯初生出题人/主办方了。
这题导致我吃了 8 发罚时,并且在 2:30 才过了此题(题面 2:00 就修改了,却没有公告广播,只有一个在比赛详情页的,右边一小块地方提了一下,我直接麻了)
也觉得神奇,那些在题面修改前过的是什么样的人?
- 实验了一下,知道了,printf 输出 double 类型,默认六位小数。
F 题
题面里写的是
前 $i$ 个元素中的最大元素,且小于等于 $X_i$。如果没有答案,请打印 -1。
但是实际上,是小于等于 $X_i$ 的最大元素。
虽然这个点可以从样例里看出来,但是出题人的描述能力,可见一斑。
E 题
最后说到:“每两个连续数字之间的绝对值”
我想但凡打过 CF 的人都不会这么描述两个相邻元素。
I 题
不同的子序列连续以字母 X 和 Y 结尾
对于某些索引 S1[i] 不等于 S2[i],则 S1 和 S2 被视为不相同
从未见过在中文题面里写“索引”的。
这题是导致我这场比赛炸裂的罪魁祸首。
我读错了整整两个多小时的题面。从 10:30 读错到 12:50。
我赛中以为求的是以 X 开头,Y 结尾的子序列(下标)的个数。
就比如说,第一个样例:xhapxcicbt
,我以为的解是 p x c/p c c/p i c。
并且我还纠结了很久,他这个不同的子序列,到底是不是“本质不同”的个数。
后面我才意识到应该是求以 XY 结尾的本质不同子序列的数量。
最伤心的是:按我之前的题意理解做法得到的 O(nm) 做法,一直卡在 1.5 s 时间超限,导致我一直以为是卡常,卡了整整两个小时的常。从 1.6s 卡到 1.3 s 还是时间超限。
而且我后面揣度出正确题意后,用时 1.3s 时,有时返回时间超限,有时返回答案错误。不懂 OJ 在干什么。
抛开事实不谈,这个样例屁用没有。
赛时无答疑
一开始我就发了 A 题的询问,到结束,没有回复。不懂他那个“私信官方”是不是就一个摆设?
其它
总的来看,这比赛是不是没有验题人?
A 题这样的锅都能出现。已经不是能力问题了。
从题面上,我一个很大的感觉是,大概率是大学老师出的题,而不是 ACM 选手出题。
也不懂这个监控体系是在干什么。
中途上厕所往哪报备?
官网写的是“报名编号+姓名+去做什么+预计多久的形式发给组委会老师”。
通过什么形式发?
我以为它都这么说了,监控系统里应该有申请入口。结果屁都没有。
而且这个报备,也没什么意义吧。该“厕所战神”还是“厕所战神”。
但是打都打了,复盘也写一下好了。
开局 A 先 WA 三发,没什么好说的。
因为记得 QQ 群里组委会老师说题目分布从易到难,所以直接从 B 往后做,但是这个 B 看着不是很能做。看了半天也只看出一个二分性。以及一个枚举 min,然后 max 只能是不小于 min 的最小值,这样就是,组 1 和 组 2 共产生 2n 个二元组,组 3 和组 4 同理。
看了眼榜,G 被开了,就去跟榜了,G 也是签到,没什么好说的。
然后依次跟榜开了 F E,F 开始那个错误的描述,我还以为一个前缀 max 就好了,结果还是得 set。
E 是一个打表猜结论的贪心,虽然这个类似的思路已经烂大街了。
就是把 n/2 放到最前面,然后一大一小就好了。
此时榜上暂时没题了,去看了一会 C,感觉应该是一个跟 tarjan 相关的题目,但不是很有想法,而且我 tarjan 也不是很会。
过了一会儿,H 好像有点东西。
去看了一眼,发现小清新。
大概先分个讨。把 $m\neq n-1$ 的情况讨论掉,然后要找那个中心,一个比较显然的结论:中心的度数一定是最大的,而且出了中心之外的点的度数都是小于 3 的。所以判断一下是否有超过 1 个度数超过 2 的点。
然后,然后我就发现,好像做完了。。。
原本以为还要再 dfs 一下的,想了一下发现不用。
这时已经 1 个小时了(因为我中途曾反复回去纠结那个 A 题)
再度入手 B,发现思路一下子就出来了,二分 d,然后枚举组 1 和组 2 的二元组,在组 3 和组 4 中找到一个合法的匹配,就是解一个不等式组。
$(a,b),(c,d)\rightarrow b-c\leq d’\ \land\ d-a\leq d’$
$\begin{cases}c\geq b-d’\newline d\leq a+d’\end{cases}$
只需要把组 3 和组 4 的二元组按 c 升序后,维护一个 d 的后缀 min 即可。
时间复杂度:$O(n\log ^2n)$。
不懂为什么 B 1e5 $n\log^2$ 开 2s,I 题却只开 1s。
此时才 1 个半小时。
剩下的时间基本上就是在干 I 题。
中间也曾看过 D 题,但是鉴定为答辩 BFS 模拟题,没什么意思。
I 题,按我开始的思路就是,每对二元组($s_i$,$s_j$)对答案的贡献就是 $\binom{j-i-1}{l-2}$。
预处理 $c[x][y][len]$,单次询问 $O(n)$。
但是就这个做法,TLE 了两个小时。硬是没有 WA。
最后一个小时的时候,看出了后面那个题意。
顿时的想法就是维护一个 $dp[i][j]$ 表示前 $i$ 个字符选出长度为 $j$ 的本质不同子序列个数。对于询问 $(X,Y,l)$ 就是从后往前找到 $X$ 的位置最靠后的第一组 $(s_i,s_j)$。答案就是 $dp[i-1][l-2]$,将询问离线,预处理 $O(26n^2)$。单次询问 $O(1)$。但是那个 $dp$ 数组处理不好。一会 WA,一会 TLE。
排名从十多名,掉到了 200 多名,但是组委会好像说那个榜单是没有分组的。
按有提交就算,总参数人数 3386。5% 一等,总共会有 169 个一等。去掉 A 组后应该比较有希望,但是还有 C 组。。。
那就不知道了。
感觉不是很稳。
无所谓了。
不知道它们最后这个 A 题怎么处理。如果取消 A 的罚时(包括通过用时)。
那我肯定是 6 题第一。
- 重现传智杯初赛 5 题第一(
结束后稍微想了下 D 题,发现其实不用 BFS,两个状态之间的最小操作数是可以直接确定的。具体就是两个等式之间,先判一下火柴数量是否相等,然后求有多少位置是一个等式有而另一个等式没有的即可。
这样就只需要枚举一下三个数字和运算符,单次 $O(2\times 10^3)$。