[心得]暑假7-27

最近rp=0

上午考试靠炸了,中午迟归被抓了

达哥出的题目,三道“随 单 题”,一点也不“随” “单”

考试时心态。。炸道平复(死了)

T1想了1个小时,码了一个错误的dp

完了攻T2

T2看似还可做,t=0时来一手换根,t=1时高斯消元

期望得分60 ,实得30,原因:SUM未清空,还有就是清空方程数组时用了N2归零(没判t即清空,导致t=0,1e5数据直接卡死)

本来这场考试我是不敢看T3的,留了30min打算写暴力

然而,发现T3貌似是最近卡特兰数刷过的类型

把type0,1码了一下,期望50分,结果临时一慌敲错了数,外加没预处理出逆元,只得了20分

那么这把又是扔了好多分,rk34要稳二机房

改题还算顺利,虽说官方题解是看不懂

事实上T2的思路。。不是没有,t=1的推到了$b[i]-b[fa]=SUM-s*sum[i]$,但是没有想到用 $b[rt]=sum_{i != rt} sum[i]$,结果推不出SUM,只好高斯消元拿个1e3

T1确实是毒

原根性质什么的我也不知道

颓了手题解发现二进制拆分确实挺神

$f[i][j]$ 表示拿完i个数$x=j$时的方案数,那么最终期望便是

$sum_{i=0}^{mod-1} f[M][i]*i *inv(n^m)$%p

(类似wq的奇袭做法)

我要得到m层的状态,不必逐一转移

我们发现对于任意$i,j$,满足$f[i+j][l*r$%mod$]+=f[i][l]*f[j][r]$%p

(意为:我先拿出i个数得到$x=l$,再拿$j$个数,这$j$个数的$x=r$,那么最终$i+j$个数$x=l*r%mod$)

也就是说可以“跨越式”转移

于是考虑分解m,$m=2^{k_1}+2^{k_2}+2^{k_3}+...+2^{k_n}$,我们可以只用这些&2^k&的状态转移到m

由$f[2*i][l*r$%mod$]+=f[i][l]*f[i][r]$%p可以进行$f[2^k]$之间的转移

那么其实可以省掉第一维,或者,$f[i][j]$表示拿了$2^i$个数,$x=j$时的方案数(开30就够了)

可以用$g[]$表示当前转移到的状态,最终把$g$转移到$m$层即可

原文地址:https://www.cnblogs.com/Duan-Yue/p/11256884.html