已经连续写了好多篇游记了,博客不知道该写什么好了。
Day -
省选前最后一场仿真赛。教练专门组织我们去了初中校区考试,说是要仿真真实环境。本来是信心赛,结果 T1 就做了两个半小时多,只有 120,垫了底。考完教练请我们去校外的李庄白肉吃了顿饭,也是教练第一次请我们吃饭。
Day 1
考场是电子科大,来过几次了,但是省选安排的比较寒酸,连个志愿者都没有,也没有路标指引,跟着人群走,听说还有走到隔壁雅思考场的。
机子相当奇怪,字体渲染没有抗锯齿,安装有腾讯杀毒,VS Code 不能用,不过我在虚拟机下写代码,体验还行。键盘不是传说的那种 backspace 非常小的,比较适应。监考老师挺烦人的,每隔一段时间就要提醒“不要碰到电源线了”。希望能早日像 WC 或国赛那样直接上 Linux 实体机,再配备 SelfEval。虚拟机太垃了。
SCOI Day1 的题目:
-
给定长度为 n 的字符串数组 s 和长度为 m 的字符串数组 t,求 sum i sum j sum k sum l f(i, j, k, l),其中 f(i, j, k, l) 表示 si+tj 在 sk+tl 中的出现次数。
-
给定 n 个点及一个矩形,令 Di(P) 表示 P 到第 i 个点的欧几里得距离,对于每一对 (i,j) 求满足恰好有 j 个 k 满足 Dk(P) < Di(P) 的 P 的面积。
-
有 n 个二元组 (ai, bi),如果某个时刻某个ai 小于等于 0,则会被删除,并让所有未删除的二元组的 aj -= bi。每次操作可以让某个 ai 变成 0,问最少多少次操作才能将二元组删完。但是不给定 b,给定每个 bi 的范围 li <= bi <= ri,问所有 b 取值中上面问题的答案的和。
先是先扫了一眼所有题目,T1 显然是最可做的,不久想出了了做法。比较幸运,考前字符串啥都没复习,就唯独瞥了一眼 AC 自动机的板子。然而这个东西竟然花了我两个多小时都没调出来,第二个较大样例的过不去,gdb 输出 std:: vector 也有时灵有时不灵的,调试非常恼火,急了。部分分还一点没打,只好赶紧看看后面两题的暴力。
T2 要求算面积,没啥好写的部分分,不得不先跳过。T3 就连确定 b 的问题我都只会 的做法,写了最低档的暴力,放弃了。再回头看 T1,幸运的是,不久就过了大样例,结果一拍,又出了锅,大样例弱的离谱。慌啊。好在这个错误,调试思路比较明确, gdb 也没抽风,在最后还剩一个小时的时候终于调了出来。相当激动,8K 的代码啊,看看周围好像也没几个写出 T1 的,自信起来了。
最后打算看看 T2 暴力。好像没有什么好写的,我能想到的暴力就是求出每对点的中垂线,然后再算出中垂线分割的每个部分的面积,非常难写,这么点时间肯定写不出来。有一个共圆的部分分,写了 5K 代码,最后还剩下 10min 才写完,样例也来不及测了,由于输出浮点数,来不及写 spj,看了下最小的样例,好像是对的。然后就关掉虚拟机,整理下文件夹,结束了。
后来想想,如果 T1 没调出来,我连 T1 性质部分分都来不及写,只能 40 遗憾离场,挺恐怖的,不过还好调出来了。平时大一点的题目少有在这么短时间做出来的,练习太少了,做起来很慌,把握不好时间。
Day 2
题目:
- 给定 n 个数字串,每次操作交换两个不同位置,问所有交换方案的数字串的值的积的和(允许前导零)。
- 给定 n x m 的网格图,边有边权,问至少删除几条边才不存在从 (1,1) 到 (n,m) 的路经满足路经 gcd 大于 1。需要支持修改某条边权等于 1 的边的边权,强制在线。
- 给定 n x m 的网格图,在上面摆放如:
|_ | |__
|_
这样的总共 12 种 L 形块。要求每一条网格边都被覆盖且仅覆盖一次。构造方案满足使用的 L 数量最少。
开考看到 T1 完全没思路,先打了个暴力,结果测了下极限数据,要跑 2s 多,怎么 10pts 暴力都要卡常,出题人太可恶。然后看部分分,想 N=1 的,想出来的做法手算总是答案不对,而且总是要枚举 K,折腾一个多小时后,就放弃了。感觉状态不好,很急。
看看 T2,想到判定是否有路经可以枚举质因子然后判连通性,但是判定一次都要 O(nm)
了,而且如果答案是 1 或者 2 需要判定 O(nm) 次,所以果断放弃。但是暴力也写的很不顺利,脑瘫了枚举了所有边的所有因子,不过区别其实不大。然后调试的时候遇到使用
std::vector<bool> address sanitizer 报错,但是 std::vector<int> 就不报错的情况,而且 gdb 也时不时抽风,应该是 RE 了没判出来。排查了半天发现是非强制在线的点忘记将 i,j 减一了(为什么大家都不喜欢从 0 开始编号啊)。老版本 gdb 和
sanitizer 太难用了。
T3 构造,感觉很不可做,先把 min(n,m)=1 的部分分做了,还是比较简单,结果 checker 告诉我答案出界。最终发现是题目要求 n columns m rows,非常傻逼。尝试冲 min(n,m)=2 构造了半天不会,没脑子。
到头来发现自己只有 30pts,挺慌,再想想 T1 部分分。有个 k=1 的好像比较好做,但是要推式子,一堆 Σ 乱七八糟的。中途去上了一次厕所,回来把电源线踢掉了。重启浪费了快十分钟,uestc 机房太垃了。好在式子推出来了,手造了几个样例,没啥问题。然后就不知道怎么做了,45pts 也就是垫底水平,心灰意冷地关掉了虚拟机。最后还剩五分钟的时候突然想起有 T2 有个 q=0 的部分分,于是赶忙用 devc++ 打开进程,加了个输出 0 的代码。
进队彻底是没希望了,中午出去后和 xy 和 wcx 吃饭,中途出了成绩,xy T3 竟然有 70pts,而我 T1 不知为何只有 10pts。和同桌吃饭的两个同学就被区分开了,感到悲伤。又想起了 WC 的惨痛经历,想起坐在铁牌区看着一个个熟悉同学去上台领奖。
不过倘若我进了省队,以我的水平,参加 NOI 或许也只能打个铜牌,水平差是事实。补一补文化课也好,毕竟我确实是没能力拿金牌的,最终宿命都是高考。来年再战。