最近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$层即可