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$步之前回到原点。

    得解。

  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/11256264.html
Copyright © 2011-2022 走看看