2022.03.17省选模拟赛总结
1.时间安排
7:30~8:00
T1:树形dp,状压20分,还有20分链。
T2:数学,应该是杜教筛这类的。
T3:字符串,暴力20分。
8:00~8:30
把T1和T3的暴力写了,(本场所有的分在30分钟之后就不再变化了……)。
写T3暴力的时候发现可以优化到\(O(n^2logn^2)\),但是跑不动。
8:30~9:30
推T2的式子,没有结果,积性函数也没推出来……
写了剪枝暴力,看T1。
9:30~12:00
T3实在不知道要转化成求什么,只能看T1。
以为链数据是贪心,瞎写了一版,对拍居然又没有问题,随的数据太水了……
写了\(O(nv^3)\)树形dp,答案不对,一直debug没结果。
改成了\(O(nv^4)\)想对拍发现仍然不对,才知道思路错了,但是这时候已经11点半了。
摆烂。
result:
T1:20 T2:0(27是因为数据包绑错了……) T3:20
2.反思
T1:
两位大神A掉。
链的分可以用lis确实没想到。
没有发现不同颜色权值和尽量小这个最优性。
实际上dp的时候不需要那么麻烦的去找每个点什么颜色对应什么方案,只需要维护不同颜色的节点就好了。
这种要求非黑即白的类型的题目也可以不需要维护具体到这个元素属于某个阵营的状态,可以统计出相同的和不同的,有时候直接就可以转移了。
T2:
数学题,全机房就我一个没推出积性函数……
思路局限在一直想怎么得到一个通式直接转移,没有去想再维护一个东西辅助转移,并且这个题很明显要取一个质数必须要全取完,自然想到线性筛维护最小质数最大幂,还是思维太局限了。
化简很巧妙,通过人类智慧发现答案是所有互质数对两数之和的总和,一通莫反就可以做了。
T3:
大部分时间都浪费在T1上,导致本来能做出来60分的T3没时间思考。
很裸的sam题意。sam上每个siz=1的节点对应区间取min,等差数列的转化很妙,转化为一个minval一个minr的问题。
不太懂80分并查集做法,但正解单调队列还比较好懂。
3.简要题解。
T1:
一句话题意:给出一棵1为根的树,给每个节点染黑或白并赋非负权值,每个节点有一个限制,要求子树内颜色与它相同的节点点权和恰好是\(v_i\),问是否存在合法的染色赋值方案。
\(n\leq1000,maxv\leq5000\)
叶子必须赋值\(v_i\),所以考虑树形dp,从叶子到根。
容易发现子树内颜色相同的节点权值和越小一定越合法。
维护子树内与根不同颜色的最小合法点权和\(f_i\)。转移时做背包,相同产生\(v_i\)的贡献,不同产生\(f_i\)的贡献,在dfs的过程中持续维护全树合法即可。
T2: 太复杂了,咕。
T3:
一句话题意:给出一个字符串,对每个位置,找到一个包含它且在原串中仅出现一次的最小串长度,求所有和。
\(|s|\leq5*10^6\)
跑出来sam,对所有siz=1的节点找到它对应的区间,区间取len的min,然后对到fa.len对应的这段区间,区间取等差数列的min,画个图就很清晰了。
线段树维护就能做到\(O(nlog)\),用单调队列就做到\(O(n)\)了。
4.总结
1.思维
T2死在硬莽转移通式,只需要一个辅助数组就能求出积性函数。
T1也因为硬去区分颜色导致dp式极其难写,换成相同颜色和不同后就豁然开朗。
有时候思维太死板就会在不正确的道路上一意孤行,需要把思维更灵活一些。既然已经发现了一个质因子只和最大幂有关,就应该大胆的往设置辅助数组上想。
2.适时放弃
T3很裸的sam却没留时间思考,在T1上一磕就是3个小时。
如果不是真的很确定一定能对,20分钟是调试的极限,无脑死磕肯定不划算。
而且在死磕前应该先把每道题准备死磕的算法先想好,挑软柿子捏,才能效率更高。
3.dp类题目
在推出来一个自己认为非常正确的dp式子后,第一件事不是码代码,而是应该去写一个意义相同的高复杂度dp式去和小数据暴力对拍。
dp式子就是错的,再怎么努力都是白费功夫。
再一个是把数据跑满,不跑满不容易发现时间复杂度上的疏漏,以及调用内存RE的错误。

浙公网安备 33010602011771号