2025寒假后训练总结
2025-02-05
今天一早返校,困困。寒假十天有点玩脱了,从没学习过,WC 和 THUWC 的游记还没写。
今天省选组题感觉非常有趣,但也很难就是了。
第一题是给定排列和用 XOR-SHIFT-64 生成的随机数生成方式,然后求随机种子。我首先倒推出每个 \(i\) 操作完后 \(\bmod i\) 后的值,然后枚举种子暴力 check,就获得了 40pts,这也是我模拟赛最终的分数。
实际上考虑如果模数是 \(2^k\),那么就可以得到一个关于按位考虑种子每一位的值的异或方程,而对于 \(i\) 不为 \(2^k\) 的情况也可以把 \(2\) 因子提出来。
比赛时没有发现 \(n\ge 50\),而这就好做了,当 \(n=50\) 时,方程的个数是 \(47\),高斯消元后也可以确定约 \(45\) 个元,于是枚举剩下的自由元并暴力 check 即可。时间大概是 \((47^2+2^{19}k)\),\(k\) 是做 XOR-SHIFT 暴力 check 的很小的常数。
在做完第一题的 40pts 后很困,开始睡觉。后面又想了想后两题,想到第二题可能是什么 DP,然而我发现样例 1 都看不懂,赛后才发现是直接从 1 走到 \(n\)。而第三题我就没多想了,感觉很神秘。
最后获得四十分,大概是中位数。
晚上八点把第二题改出来了,是一个比较难想的容斥,然后剩下的就用简单 DP 算就好了。具体来说如果两条路径有交那么交换交之后的路径,最后可以得到答案是 \(F(1,n)\times F(2,n-1)-F(1,n-1)\times f(2,n)\),其中 \(F(x,y)\) 是从 \(x\) 走到 \(y\) 的方案数。而 DP 就是依次插入弦,然后记录到达这条弦最后一个交点的方案数。
而第三题则是用 NTT 和发现性质等优化 DP。
总结
- 今天很困,于是没有多多思考,原来第一题和第二题考察的知识点并不难。
- 第一题没有看见 \(n\ge 50\) 的数据范围,以后要仔细看数据范围。
2025-02-06
今天大失误,没有获得理想的分数。
首先看 T1,感觉有点像签到题。一个小时时想到了可以用 ST 表配合优先队列快速求出一个后缀的第一小、第二小……但是发现如果 DFS 是错的,于是我就想 BFS,对新的点重标号而保证顺序,就这样过了大样例,然而我忘记考虑到大样例有很水的成分。
后面我去看后两题,几乎没有什么思路,T3 的暴力也不好写,于是最后只写了 T2 的暴力获得 20pts。
结果就在最后十多分钟,我想到可以给 T1 对拍一下,五分钟写了暴力,结果发现过不了拍,原来是我的做法假了。最后只好交了暴力。
赛后发现原本假做法是 36pts,暴力是 12pts。
这场比赛最终得分是 12+20+0=32,获得倒数第一。
而 T1 的正解就是考虑改进一下在 \(a\) 互不相同时正确的 DFS 做法。
可以用 vector 记录每一种相同的序列最后到达的位置,以此传参。然后可以延续之前 ST 表加优先队列的做法。最终在改题时获得了最快解。
总结
- 今天的问题在于 T1 是签到题,而我用假做法却过了大样例,以后当大样例较水时应当写对拍。
2025-02-07
今天做杂题。各题的总结写入2月杂题集了。
2025-02-08
今天开场 T1 换了三次题,因为都有人做过,最终换成了前两题都是构造。
首先看到 T2 其实就是使所有长为 \(3\) 的子序列都出现过,那么我猜可能是分治构造,之后就去看 T1。
几乎所有时间都给了 T1,然后也获得了最高分 59pts。分别看每一档,然后用手构造出一些看起来合理的图形,最终发现最后的答案大概都是循环的,于是很容易就把 \(K=2,4,5,8\) 的过了。
然后就卡在 \(K=3,7\) 了。中途花了很多时间手绘,设计出了一种 \(K=3\) 的做法,发现可以过其中的三档,但还差两档。之后就没有进展了。
最后的四十分钟我尝试写 T2,然而最后十分钟发现我的思路貌似假了。
最终得分 \(59+0+0=59\),取得中位数。
总结
- 本次比赛问题在于没有写 T3 的暴力,事实上如果 T3 获得 20pts,再加上 T1 的分数,就能取得非常高的排名。
- 像 T1 如此暴力的题应该最后花时间来想,应该先把其他题的暴力拿下。
abc392
因为太久没打 abc 所以没有 Rated,所以做慢了也不紧张。
做完 ABC 以后,D 题让我有些犹豫,决定先放一放。
然后我看到 F 题,发现是平衡树板子题,我想用 rope 水分,然而 TLE 了,只好老实地重写了一遍 FHQ-Treap。
然后看到 G 题,想了很久终于想到可以把 \(B-A=C-B\) 移项得
枚举 \(B\),就是求有多少组 \(A+C\) 等于 \(2B\),于是用 FFT 卷积即可。
然后回头做 D、E。E 题 WA 了两发,第一发因为忘记了题意只能改变一个端点,第二发因为一个变量名写错。
然后是 D 题,刚才已经想到了一个 \(O(n\sum k_i)\) 的做法,很快就实现了。
最后在还剩二十多分钟时 AK 了,前面已经有十几个人 AK 了,属于是做太慢了。
2025-02-09
今天终于场切了一道题。
首先开 T1。发现贪心不可做,于是想到了 DP,求出每个子树内的最大值。把路径挂在 LCA 上,加入一条路径时要加上这条路径上挂着的那些子树,注意到还有儿子不能重复选的限制,于是加上状压,枚举子集合并复杂度可以接受,最后更新路径和,路径和使用 BIT 维护。最后复杂度是 \(O(3^{10}n+(n+m)\log n)\)。过了这题大概用了一半的时间。
然后对于 T2,看到数据范围,想到可能是 \(O(n\sqrt n\log)\) 或 \(O(n\sqrt n)\) 左右的复杂度,于是考虑怎么分块,但没想到,于是打算写 \(O(n^2\log n)\) 的线段树上二分试图拿到 60pts,然而赛后发现只有 25pts,大概是写假了。
然后 T3 就没有什么思路了,似乎因为重复元素很少所以可以水很多分,但我只写了 20pts 的暴力。
最终得分 \(100+25+20=145\),排名属于中间。
总结
- 今天的分打得比较满,但 T2 写假了有点可惜。T3 也还可以试图水一些分。
- 今天 T1 在赛时通过对拍成功发现了错误,以后能写对拍一定要写对拍,特别是没有大样例的时候。
2025-02-10
今天杂题 & 自主安排。各题总结写在2月杂题集里了。
2025-02-11
T2 是半年前做过的树分块原题,但当时没改出来。
首先做 T2 前三个档是容易的,考虑第四个档,发现一个性质:对于一个问号变成 \(0\) 的点,其父亲一定不存在问号变成 \(1\) 的点,否则交换一定更优。那么现在就是选若干个不相交的子树,这些子树中的问号填 \(1\),其他问号填 \(0\),那么可以按 DFS 序 DP,当一个子树 \(x\) 全选 \(1\) 时,从 \(i=dfn_x\) 直接转移到 \(j=dfn_x+sz_x\),预处理一些东西的子树和与到根的路径和即可做到 \(O(qn)\)。写完并交上去用了 2h,预计获得 50pts。
然后回头做 T1。先想没有问号怎么做,我想到了对于位于 \(i\) 的加号,记前面有 \(s\) 个减号,那么如果 \(a_{i-s}\) 为减号那么就有 \(1\) 的贡献。就这样可以得到 30pts。交了上去,此时已经过去三个小时。
T1 我尝试用 DP 代替暴搜,然而并想不到。然后看 T3 题意太冗长,各种定义套来套去,估计要做很多等价变化,暴力分也很少,于是就没有再看了。于是最后的一个半小时一分未得。
最后总分 \(30+50+0=80\),发现很多人都过了 T1,T2 也能得到 75pts,所以今天垫底了。
赛后
ZnPdCo 用了一个更显然的性质做了 30pts,于是他就能 DP 优化了,我就无法套上 DP。性质:记一共有 \(s\) 个加号,那么贡献即为 \([1,s]\) 中减号的个数。
总结
- 今天 T1 的性质不好,不能直接优化,然而可以打表发现一些更显然的性质从而 \(O(n^2)\)。
- T2 属于是之前没有改题导致的。