爆
THUWC Day1
Day1 时间是 8:00~13:00 5h 四道题,然后我前一天复习了一些算法,然后就比较早的睡觉了。
开始比赛,我先通读了一下四道题,发现这次应该没有签到题,然后我决定从看起来比较可做的 T1 开始。
T1 第一想法是把区间看成二分图,然后有矛盾的连边,求最大独立集,但是这个数据范围显然没有办法做。
然后考虑在序列上 dp,设 \(f_i\) 表示以 \(i\) 结束,剩下一段是下降的最大答案,\(g_i\) 同理,然后转移就是枚举上一个 \(j\),贡献就是所有 \([j+1,i]\) 包含的区间的个数,这个没办法直接维护,但是可以发现在遇到一个区间的右端点时,把 \([1,l]\) 的 dp 数组 \(+1\) 即可,于是就是一个区间加,区间求 \(\max\) 的问题。
然后我就写了大概半小时,但是后面一直没有调出来,于是写了个对拍,但仍然没有找到错误。然后我突然一想,发现在 \(l=r\) 可能会出现一些错误,于是加了个特判,通过了。这个时候大概是 10:00。
然后接着看 T2,T2 一开始我以为是什么 DS,但我想了很多 DS 发现都不是很好维护。我就感觉我可能想不出正解,考虑拼部分分。
然后部分分多而且比较杂,我把我会的全都写了有 36 分,中间有个要用 hash 的我使用了 umap 但被卡常了。赛后听说用 gp_hash_table 就能通过但是我当时没有想到。
然后又尝试去想 T3,首先有个很容易的 \(\mathcal{O}(n^3)\) 的暴力,打完暴力观察一下性质可以发现答案具有三分性,于是又可以通过另一个部分分。T4 也是写了个暴力,有 20 分。然后最后帮个小时我觉得我可能会了 T3 另一个部分分,要使用线段树,但是写道最后没有调出来。
最终得分(pretest):100+36+24+20=180,这个分数并不算太好。
这场考试中 T1 是一道比较典的题目,但是我因为一个 corner 卡了很久,T2 的做法可以说和 DS 毫无关系,但是我一开始就往那方面去想了。T3T4 本来想出正解的可能性不高,应该尝试多拼一点暴力。
T2 大概就是考虑可能成为答案的对数不会太多,大概维护前 \(30\) 大的就行了,这个题目主要是要观察出性质,而不是一来就盲目的想 DS。
THUWC Day2
Day2 的工程题是我完全没有想到的,完全就是写大模拟。
前三题都是简单题,写了四十分钟左右就通过了。然后第四题按照题意写了之后我一直 RE50。我以为时我的数组空间开小了,结果一直看了 20min 代码,发现是调用矩阵乘法的时候参数写反了,大概在 9:40 左右通过了。
T5 也是直接照着描述的模拟就行,在 10:30 左右通过了。
T6 的题面非常长,于是我就开始仔细的阅读题面,中间有很多地方因为题面只给了个大意,具体实现细节可能要选手自己推一下式子,或者凭直觉做之类的。我大概想了 40min,于是准备开写。
一直写写写,大概写了半小时写完了,交上去发现只有 7 分,我就再回去仔细阅读题面。发现题面中有好一些细节是我没有注意到的,而且代码中也有一些错误,然后我就改改改,每次改了就交,但是每次都只有 8 分左右。因为这个完全没给调试的方法,我也只能瞪眼看,但直到最后也没有调出来。最终得分:508 分。出场后发现可能我问的 90% 的人中都是这个分数。
只获得了银牌,zhicheng 207+508 也只获得了银牌,所以我离金牌可能还有点分数。
像 Day2 这种大模拟会考你的阅读理解,看你阅读的仔不仔细,这可能是我平时训练中都没有注重到的,于是就获得了一个大众分。但又因为 Day1 的分数不是很高,所以和别的选手有差距。
WC
WC 是 10:00~15:00 这个比较阴间的时间,一共有三道题。由于这个时间段我要睡午觉,所以为了避免犯困,我前一天直接很早就睡了。
拿到三道题目,先通读一下,发现 T1 是个比较神秘的题目,T2 有可能是 Ad-hoc,T3 看起来是线性规划或者 DS。
还是先看 T1,我在纸上玩了几个样例后发现,猫粮一定是两两配对,发现这个之后就很简单了,写个桶统计一下即可。大概在 10:40 左右通过了这道题。
然后我感觉 T2 可以做,我先去想 50% 也就是只需要输出答案而不用输出构造的部分分。我先了个贪心,从高到低枚举每一位,如果这一位有奇数个 \(1\) 就把剩下的数中最大的加到这一位为 \(1\),这个可以通过 B 性质,然后再输出一个方案,可以获得 44 分。
后面我又想非 B 性质怎么做,又是想了贪心+调整的算法,写了一会儿后发现只能通过 A 性质,现在有 50 分,此时是 12:30,于是我决定先跳过这道题。
然后看 T3,首先把选区间操作变成选哪些位置最后状态改变了再计算最少用多少个区间覆盖。因为 \(\mathcal{O}(n^2)\) 有 35 分的高分,于是我准备思考一下。可以设 \(f_{i,j}\) 表示前 \(i\) 个数中然后前面有 \(j\) 个区间可以转移过来的最大价值。这个时候我认为转移可能需要枚举一个点上一个点选哪一个点,于是就有了个 \(\mathcal{O}(n^3)\) 的做法。
然后我写出这个方程的转移式子,开始想优化,推了一会儿式子后发现,这个似乎可以用前缀和后缀 \(\max\) 把转移优化到 \(\mathcal{O}(1)\),于是我就开写,然后调试,一直到 13:30 左右写完。然后测第二个大样例,把一些错误修正了后通过了第二个大样例,但是发现一直无法通过 selfeval。
这个时候我就有点觉得不对劲了,第二个样例明明全都通过了但是只获得了 5 分。我一直对着我的代码调试,但是一直到最后也没有看出来错在哪里。最后遗憾离场
最终得分:100+50+5=155,这个成绩在七中可能是最低的几个了,并且没有获得牌子。
T3 我一直在想枚举上一个断点在哪里,但是没有想直接不去枚举,可以直接钦定这个位置是不是断点,然后就可以很轻松写出一个 \(\mathcal{O}(n^2)\) 的转移式子,而且这个式子能直接使用线段树优化。我可能以为是这个题是 WCT3 就觉得一定不可做,没有很细的想。
回顾这两次比赛,和这几个月的训练成果,在 NOIP 过后,我的成绩在七中的排名似乎在不断下降。在 NOIP 前的联考,因为题目都比较简单,所以我一般四道题目都可以改出来。但后来因为题目变得越来越难,加上一开始考试我可能还没适应过来,我开始越来越失去信心,而且改一道难的题目可能会耗时很久,所以我一般都没有去碰那些很难的题目。而是自己去写其它的题。
这段时间里,由于题目难度一下就上升了很多,好多题目我都只是理解了个解法就完了,都不是写代码,有些时候一天下来感觉什么事情都没有干。
这种状态肯定是不能一种保持下去的,我也在这个时候意识到了我的问题。我会尝试在之后的考试中改出所有题目而不是遇到难题就跳过,只有这样才能提高我的水平,然后有空可以 VP 一些比赛之类的,希望我能在这条路上坚持的走下去。