达哥简单题,一道半数学一道半$dp$,总的来说还是比较简单的(虽然我考成了x)
总的来说就是$T2$干的时间太长了,导致我没有时间想T1,(样例都错想个p)。
T2真的是一步之遥,但是还是功亏一溃了,连个高斯消元也没打,老以为自己能推出来公式。。。
下次还是好好打暴力吧。
题解:
T1:
首先特判20可以拿到,发现$n=1$的时候直接快速幂即可只有一组方案。当$mod=2$的时候,$a_i$显然都是1,那直接输出1即可。
原根好题,不知道原根是啥的看我上一篇$blogs$。
我们求出$mod$的一个原根$g$,这个时候,可以用原根表示任意的$mod$同余系,这时候可以$dp$了。
设$dp[i][j]$为第$i$次选中,答案为$g$的$j$次方的方案数。
初始化:$dp[1][j]=sum limits_{i=1,g^j equiv a[i] (mod p)}^{n}1$
转移:$dp[i][(j+k)% phi(p) ]=sum limits_{j=0}^{phi(p)} sum limits_{k=0}^{phi(p)} dp[i-1][j]*dp[1][k]$
发现$m$过大是$1e9$,但是每次这一阶段状态都从固定的上一阶段的状态的来,因此可以矩阵快速幂优化,注意到$mod$大小为1000,$O(n^3)$的矩阵乘法还是会死,打表发现(其实是欧拉定理的推论,具有$phi(p)$循环节),是循环矩阵,可以$O(n^2)$转移,问题得解。
T2:还是比较简单的,推一推式子就行了,这里不写了,但是需要注意的是一些被忽略的条件,例如$b_1=sum limits_{i=1}^n S_i$这个推论,我当时想了好久也没有最终得到$mx=sum limits_{i=1}^n a_i$,于是最终没有写出来,有一些简单的条件不要忽略,很早就发现我只能列出$n-1$个方程,而这个关于$b_1$的方程就是最后一个方程了,随便代一下数就发现可以线性递推了。
T3:这个就更加简单了,五分钟推了三个式子,全都一次过样例,我运气也是没谁,但是编号2的楞是没写对,一直$dp$一直错,观察数据范围得到的$O(n^2) dp$,的确是这样的,利用卡特兰数把$dp$优化到$O(n^2)$级别,这样就能够快速转移从而得到解。
具体来说。设$dp[i]$为走到第$i$步的时候,回到原点的方案数。
初始化:$dp[0]=1$
转移方程:$dp[i]=sum limits_{j=0}^i 4dp[i-j]Catalan(j/2-1)$
相当与是分成了第$j$步第一次回到原点和之后多次回到原点,而卡特兰数的意思是他只能往一个方向走,而不能往其他方向,并且从先走一步开始算,以保证他不在第$j$步之前回到原点。
得解。