2022.07.27 NOI模拟赛总结

1.时间安排

7:30~7:50

T1:毒瘤树上DP题,求所有排列,满足相邻两点(包括首尾)的路径完美覆盖原树(即每个边被路径覆盖次数恰好等于边权),除了暴力感觉不可做。

T2:毒瘤数论题,对所有 \(n^m\) 种排列求lcm的和、乘积,但感觉比T1可做一点。

T3:维护表达式,每个字符是0/1、位运算符,括号中一种,0/1和位运算符给定出现概率,支持单点修改查询表达式值为1的概率,居然有25分暴力(难度倒序确信),还有25分没有括号。

7:50~8:30

写T1T2阶乘复杂度暴力,因为T1一开始没理解清题意调了一会,25pts。

8:30~10:00

暴力直接从左到右O(n)DP,遇到括号加深一层递归即可,细节不少,写到9点左右。

没有括号的话不需要递归,运算顺序保证严格从左到右,就可以套路的把DP转移方程用矩阵表达出来,用线段树维护。

细节也不少,用了40分钟左右。

还有数据随机的点,可能建出括号树后暴力修改复杂度正确,但场上脑子糊涂觉得复杂度是O(节点数)的,就没再继续思考,实际上是O(树高),期望是logn的,痛失20分。(不过赛后据LYC说细节多的一批,12K代码恐怖如斯,但是思路很显然,还是亏了/kk)

10:00~12:30

发现T2n<=15似乎可以DP,复杂度与lcm的最大值有关,打表发现只有3e5左右,就可以直接暴力DP做15分。

(tnnd,忘记了如果DP的值是指数的话根据降幂公式要模\(\phi(mod)=mod-1\),痛失8分)

如果只输出乘积的话可以再拿17分,就往这方面思考。

先直接对答案打表,什么规律都没有。

后来想根据 lcm=乘积/gcd,求lcm的乘积相当于分别求分母分子的乘积,可以独立做。

gcd好求,类似暴力DP,前i个数gcd=j的方案数就可以做了,但复杂度\(O(n^2m)\)稍有些大。

打了表,试图找规律,什么都找不到/kk

没办法,只能先这样,再考虑求乘积。

然后就不会做了,DP不出来,打表也找不到规律。

硬想到比赛结束。

result:

T1:20 T2:8 T3:50

2.总结

T1:

离谱DP,暴力转移还没看懂,更别说上ntt加速,甚至ntt加速是部分分解法。

(待upd)

T2:

记住计算指数需要降幂公式模\(\phi(mod)\)!!!!!

J神说他打表发现n=40左右不同的lcm只有300个,暴力做法用hash表实现可以做30分,用唯一分解定理表示法实现可以做40分。/kk

值当用分数买个结论了。

然后J神说了一个神秘DP,大概是唯一分解定理枚举lcm这类的,可以做乘积,大概懂了,但是不好写(咕咕)。

正解高深数学,我不配。/kk

(待upd)

T3:

相对今天来讲最简单一道题了,也复习了数据结构维护表达式的一些技巧。

建出来括号树后,暴力修改会寄,用树剖维护就好了,但是直接做的话可能到NOI2022打完都调不出来。

一个容易实现的做法是多叉树转二叉树,类似表达式树的样子,把表达式建成叶子是数字,父亲是运算符的样子,这样做的好处在于原来的做法是两个式子对一个运算符的运算,需要讨论矩乘的顺序(矩乘莫得交换律),这样的话只有两个数字对一个运算符的运算,不用考虑顺序。

建出这棵二叉树后树剖一下,每个节点放一个矩阵,里面的值是重儿子是0/1时整棵子树是0/1的概率,对叶子来说就是这个数字是0/1的概率(也可以只用两个数字来代替,另两个可以用1-得到)。

用树剖维护即可,复杂度 \(nlog^2\)

记得上次遇到这类题还是[Ynoi2013] 文化课,套路不大一样,那题是一个根号的结论,这类维护表达式题做的比较少,套路见的不多。

这题的多叉树转二叉树是一个比较妙的想法,可以不用受交换律限制的运算的计算顺序的影响,很妙。

posted @ 2022-07-27 20:16  Displace  阅读(35)  评论(0)    收藏  举报