zoukankan      html  css  js  c++  java
  • 「2019.7.27 考试」数学极限

    达哥简单题,一道半数学一道半$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$步之前回到原点。

    得解。

  • 相关阅读:
    sqli-libs(3)
    python学习之路(18)
    BZOJ3534:[SDOI2014]重建——题解
    洛谷省选斗兽场全通关祭~以及之后的打算!
    BZOJ4596:[SHOI2016]黑暗前的幻想乡——题解
    BZOJ2732:[HNOI2012]射箭——题解
    BZOJ1486:[HNOI2009]最小圈——题解
    BZOJ4552:[HEOI2016/TJOI2016]排序——题解
    BZOJ2830 & 洛谷3830:[SHOI2012]随机树——题解
    BZOJ4889 & 洛谷3759:[TJOI2017]不勤劳的图书管理员——题解
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/11256264.html
Copyright © 2011-2022 走看看