这次模拟赛考得比较差,一下子掉到了 rank8,原因主要有几个方面。
还是一样,先要回顾自己赛场上的状态,找找主观因素。
一开始看 T1 ,以为是个 DP,但前后都有限制,从没见过这种类型的,无从下手。顺便记下 30% 的暴力可做,去看后面。
T2 一开始以为裸的马拦过河卒,看到后面才发现数据范围比较大,传统的 DP 应该只有 50 分。
看 T3 的时候一开始读太快了,以为不能跳的点是固定的,想到了奇怪的容斥方法。后来发现原来不是一定的,就放弃了。看看数据规模,感觉不可做。
(主要是没有想到把行和列拆开考虑)
想了想,尝试把 T1 的限制先简化一下,解决较容易的问题。但是在如何处理“至少有一条是正确的”上面开始纠结。(转化思维不够强,没有想到可以把后缀限制统一转为前缀限制)瞎想了半个小时,弄了一些奇怪的算法,结果都能找到反例。
还是决定先把暴力打了,其实很好实现,二进制枚举+检查每条限制就可以了,虽然时间复杂度很高,但是编程容易,30 分不难拿。
(其实可以把限制去重,只保留本质上不同的,再去枚举就会快一些。但我当时竟然没有想到这个优化。)
写了 15 min,过了第一个点。
于是就去看 T2 了。分析了一下,直觉感觉应该最好是向右或向下走,所以花 15 min 写了个
O(n2)
的 DP 交了上去。结果第一个点居然没过?
先排查了一下程序里面可能出现的错误,静态查错没有发现问题。决定打个硕暴力无比的 dfs,用小数据对拍居然也出了问题。
最后发现是“根据当前坐标
(i,j)
确定所在层并获得权值”这一步出了问题,因为我的变量含义和题目稍微不同,直接套用题目中给出的式子反而会出问题。
改了一下之后再交,第一个点终于过了。但为了防止再次因为细节翻车,我还是决定按照惯例,对照一遍题目看下代码。
这个过程中果然注意到了一个地方,“对于所有数据,保证每个数都是不超过
109
的正整数。”说明答案可能会比较大。而我处理 DP 边界的方法不是在转移的时候判断
i
和
为了避免出现“无穷大不够大”的尴尬,我还是改掉了这种方法,用 DP 的过程中判断
i
和
事实证明,这个修改让我从 30 变成了 50。(然而这题 100 也不难想啊……
又往下看,感觉 T3 没有明显的数据梯度,只有一个“对于
14
的测试数据,
n=0
”。能不能先考虑这部分的分数呢?
从这个条件入手,我发现就是一个裸裸的 DP。但是,空间复杂度达到了
R×Tx×Ty
(不过可以用滚动数组省掉一维)。而直接转移的话,时间复杂度则达到了
O(R×Tx×Ty×Mx×My)
,硕大无比,肯定会 T。但我只好赌前面会有硕小的数据,先试试正确性再说,结果交了之后第一个点没过。
不用想都知道肯定是 T 了,回去看的时候惊觉转移过程可以用前缀和维护,搞掉两维,这样应该就可以水一些点了。
但是不知道为什么,我的前缀和貌似出了点偏差。结果一直找不出问题,赛后我发现,转移的时候对于
j≤Mx
的情况应该特殊判断一下。
客观因素:
- 题目确实难度相对比较大,全场最高分也只有 140。
- 考场有某些其他干扰因素,影响思考。(但说明自己专注度不够强)
每次模拟赛结束的一刻我都会想,如果这就是你的 NOIp 呢?如果这就是你的 GDOI 呢?特别是 OI 模式刷新页面看到成绩的时候,百感交集。
但是赛后再来反思自己,每次都能发现一些不足,到目前为止没有一场是自己认为发挥“出色”的比赛。
更何况,现在我们还知道这是“模拟”赛,心理上不会有太多想法。一旦到了真正的赛场上,心理活动可就完全不一样了。
想想我的 GDOI2016,GDKOI2017 和 GDOI2017,连续三次,两天的签到题都“手抖”。有时我想,这究竟是偶然还是必然?或许,正是之前平时的态度有问题。
所以现在我总是告诉自己,你一定要全身心投入每一次模拟,就把它当作你的 NOIp。不幸的是,如果按这几次的成绩来看,今年肯定是拿不到一等了。
也就意味着,对自己的要求还应该更高。虽然我做到了比赛过程中不讨论,问心无愧,但是独立思考时候的思维能力却还欠缺,编程实现上也时常出现小毛病。
不管怎么说,起起落落是竞赛生涯的常态(除了极少数的大佬),一次模拟也根本决定不了什么。
总之,把心态端正好,用积极的态度面对挑战,每一天都让自己学习、巩固新知识和总结的过程中变得更充实。
做好自己的本分,享受探索和追求的过程,争取新高度,但绝不刻意苛求结果。