塞爱死屁杠姐斜杠爱死游记(考场纯享版)

A_R_O_N_A

2024-10-30 19:25:40

Life & Travel

我认为标题不需要中译中。

10.25

我在 CW 集训,而我的考点在遥远的南山,不过教练特许我们今天中午就放假了,所以影响不大。

去年考前最后一天还在打模拟赛,今年也是良心了一回了。上午也没写什么新题,去打了一堆板子,包括 STL,单调队列单调栈,树状数组,ST 表之类的,线段树没打,因为不会,所以选择用树状数组维护区间加区间查询

中午放学,挤二号线来到熟悉的成都东,然后坐着熟悉的 CRH3A 回家了。

下午?战争雷霆,启动!

晚上和 DYCW 这边的教练汇合了,然后一起前往南山旁边的酒店。教练让我们在酒店里面教一下今年新来参加的小选手一些骗分技巧。然后我们也是十分的服从命令啊,另外两位直接用笔记本开始玩起了 florr,还有一位打王者。我并不是很感兴趣,于是:布鲁阿开幕,启动!

就这样颓了半天。

10.26——普及

总结:稳了。

南山今年还找了几名志愿者当引路人,不错。

上午打普及,一眼望去全是小学生们,当时感觉今年的分数线应该会低一些

Win11 不错,整体操作流畅至极,比 CW 好多了。

密码晚了 5 分钟才发出来。不过 SC 今年采用的文件收集在线提交系统不得不打一个大大的好评,再也不怕打错文件名了。

小技巧:PDF 是用密码锁着的,但是大样例并没有,可以根据大样例文件名提前写好 freopen。另外今年提供的小熊猫也是超级好评,使我这个守旧派都迷上了它并舍弃了 DEV-CPP。

开 T1:发现是一道字符串判重,莫名想到 P3370。map 直接创过去,为了防止保龄还是稍微测试了一下大样例。

Now:10min(据考试开始)

开 T2:发现是一道搜索类似题,读完题目发现因为有方向限制退化为了模拟题,不过还是用 BFS 创过去了,打完之后发现样例神奇的错掉了,原来这道题可以重复走以前走过的格子,于是删掉了 BFS 板子里面的防止重复的模块,大样例没问题,AC 了,总共跑了 500ms+,STL 还是有点慢啊。

Now:25min

开 T3:发现是一道模拟题(当时心里在想怎么今年普及全是模拟),不过肯定是有结论之类的。先打了个 DFS 加了一堆剪枝创过了 n\le 50 的限制,开始推结论,注意到特殊性质与 7 相关且 DFS 出来的最优解都是以多个 8 结尾的。同时要让数字最小首先要满足位数最小,所以单个数字消耗的木棍一定要多,8 显然是消耗最多的,贪心正确性显然。再用 DFS 验证了一下结论,最后分讨 AC。

Now:1h

开 T4:其实到这里我就觉得自己普及一等稳了,发现我前面的几位小朋友都还在抓耳挠腮地调着 T2,可以放松放松了。看了一眼题感觉不会,开始想暴力,结果暴力也想不出什么所以然,果断选择拿 r=1 的特殊性质分。此题退化为寻找一组字符串中以 1 开头以 c 结尾长度不超过 k 的子串,O(n^2) 暴力创过去。结果调大样例发现不对,用 fc 比较一看自己的程序输出的行数多了,发现是在 break 的时候没有判断是否有解,在有解的情况下多输出了一个 0。然而这个错误我调了 2h。

Now:3h

睡觉。

Now:3.5h

结束。以社牛体质采访了一下周边人发现都只打了差不多 200 分,感觉自己稳了,心情大悦。

10.26——提高

总结:状压高光时刻,特殊性质高光时刻。

这次密码终于准时给了。

先不开 T1,观察整套题:预估自己暴力打完的分数是 180± 分,比去年 1= 分数线高,也算给了自己一点点信心吧。

Now:5min

开 T1:因为是第一次打提高,而且教练的地狱模拟赛的地狱难度使我养成了不思考正解优先打暴力的习惯,所以并没有往贪心方面想。使用 next_permutation 枚举全排列,也就是枚举对于每一个人打另外的每一个一个人的情况并统计答案,事先用一个 check 函数跳过那些自己打自己的情况即可,暴力成功创过去。开始思考特殊性质分,分讨 2 的数量大于 1 的数量和 2 的数量小于 1 的数量即可。特殊性质打完之后给了我一些正解思路:排序并贪心分讨。最后按思路打出来,成功创过最后一个大样例,又将程序拿去验证其他几个小样例,全部通过,随后选择保留暴力程序并使用数据分治,小数据规模用暴力,大数据规模用疑似正解,用了一个 check_1_2 函数对应特殊性质分讨,整体又用了一个 namespace 套起来,有一种石山的感受。

Now:1h

开 T2:物理乱入。一眼看过去先打暴力,利用给出的公式计算每一辆车路过一个测速仪时的瞬时速度,并统计超速的数量,显然是 O(n\times m) 的。之后的拆测速仪环节倒是难到我了,观察到 m\le 20 的限制,于是拿出了我最拿手的状压但是不 DP 算法,用一个二进制数表示拆了哪些测速仪没拆哪些测速仪,同时用一个 vector 记录每一个测速仪拍下来的超速车辆的编号并全部塞进一个 set 里面,最后判断 set 的大小是否与统计出来的超速车辆的数量一致。显然是 O(2^m\times n\log n) 的,可以被卡,但是我觉得 CCF 并不会想到我这种究极乱搞暴力的。

当然事实并没有这么顺利,我是在打了统计暴力代码之后的 1h 之后才想到状压的,之前在干什么呢?之前在打神奇 DFS,一挂再挂。

Now:2.5h

开 T3:包不会的牢底。注意到 n\le 15 的限制。状压的想法又在脑子里面出现了。0 代表红,1 代表蓝,瞬间创过去。

Now:3h

开 T4:一眼不会,甚至暴力都不会,特殊性质也不会。包保龄的牢底。

Now:3.2h

回去想 T2:观察到特殊性质 a_i \ge 0 的限制,发现既然你一个测速仪下面超速了,后面的测速仪就肯定会看见你超速,只需要在最后一个测速仪判超速即可。随后又注意到,既然你超速了,那么最后一个测速仪一定能够拍到你超速,所以把测速仪拆到只留最后一个即可,也就是输出 m-1。不过 CCF 给你挖了个小坑,没有超速车辆时要全部拆光光。还好大样例里面有这一个情况,不然我得狠狠挂分。

Now:3.5h

睡不着,去 Linux 里面玩了一会,顺便改了一个暴力出奇迹的壁纸,给自己一点心理小安慰。

Now:4h

DYCW 同机房的大佬说自己能拿 200pts,%%%

好朋友和我一个分数,DYCW 同机房有一位普及初赛没过提高初赛过了但是没有任何经验的人说自己能有 100pts,看来今年提高偏简单了,感觉自己可能拿不到 1=,不过现在才初三,还有机会。

分数

期望:

普及:100+100+100+5=305 pts

提高:100+60+20+0=180 pts

实际:

普及:100+100+100+5=305 pts

提高:100+\red{30}+20+0=150 pts

考场代码

here

考后分析

这次无论是 -J 还是 -S 都能够体现出我比赛的代码的一个巨大特点:一坨石山。当然也可能是我打数据分治嵌套 if 再加上套 namespace 的习惯导致观赏性不佳,这一点在 S 的 T2 上面体现得淋漓尽致。不过好处就是数据分治能让你吃到“分数低保”,这一个 sub 爆了,另外一个 sub 可能不会爆。套 namespace 是我第一次尝试,也是挺大胆的,毕竟模拟赛都没有打过套 namespace,我居然在正式考试用了,不过不用担心变量名冲突是真的爽。

J 其实没什么好分析的,期望与实际一致,不过 T2 用了一个假 BFS 略显夸张,实际上这东西还是个模拟,毕竟那个队列完全没必要,循环次数只是与 k 有关。

S 的话,T1 没想到更简单的众数做法,用了一种贪心的思路,半个小时打出来。主要问题就在 T2 上面,我的纯暴力近似时间复杂度是 O(2^m),看似可以在两秒的时限下面跑过多测,但实际上是 O(m\times 2^m \log nm) 而且没有加 break 之类的优化导致必须跑满,再加上又用 set 又用 vector 的重度 STL 依赖症导致常数起飞,快读快写都救不了的那种。然后 #2 就 TLE 掉了,此时还没完,注意到我在特殊性质里面没有判断超速车辆的出现位置,所以导致特殊性质直接从 40 挂到 20,CCF 还是太良心了,因为他可以把我卡到 T2 只有 10 分,却还是给我留了 30 分。T3 的 DFS 实际上和状压没区别,O(n\times 2^n) 跑过去拿到了该拿的分。

然后就明年再接再厉吧,今年也就这样了。

退役?还没到时候呢。