• 「考试」省选26


    T1
    dp+多项式。(喜欢的类型)
    (dp[i][j])已经插入了(i)个区间,当前的序列长度为(j)的方案。
    目标:(dp[m][n])
    初始化:(dp[0][0]=1)
    转移:

    [dp[i][j]= egin{cases} dp[i-1][j]+sumlimits_{k=0}^{j-1}dp[i-1][k](k+1)&i ot =m\ sumlimits_{k=0}^{j-1}dp[i-1][k](k+1)&i=m\ end{cases} ]

    直接考虑对于(dp[m][n])来说(dp[0][0])的贡献。
    设经过的序列长度为(i)
    (A_1+1,A_2+1,A_3+1....A_i+1)
    贡献就是这个序列的乘积乘上(inom{m-1}{i-1})
    就是考虑爆搜的过程中哪一步走(dp[i-1][j])的转移贡献。
    已经限定最后一次也就是第(m)次,它必然是第二种转移,所以组合数是(m-1)(i-1)
    这样的话非序列部分贡献确定了。
    求序列部分的贡献。

    [prodlimits_{i=1}^{n-1}((i+1)x^1+1x^0) ]

    可以变换为:

    [prodlimits_{i=1}^{n-1}(x^1+(i+1)x^0) ]

    [F_{n-1}(x)=prodlimits_{i=1}^{n-1}(x+i+1) ]

    [n=2^w,log n ]

    [F_{n}(x) ightarrow F_{2n}(x) ]

    [F_{2n}(x)=F_{n}(x)F_{n}(x+n) ]

    [F_{n}(x)=sumlimits_{i=0}^{n}a_ix^i ]

    [egin{aligned} F_{n}(x+n)&=sumlimits_{i=0}^{n}a_i(x+n)^i\ &=sumlimits_{i=0}^{n}a_isumlimits_{j=0}^{i}inom{i}{j}x^jn^{i-j}\ end{aligned}]

    卷积两次即可求出(F_{n-1}(x))

    [ans=sumlimits_{i}inom{m-1}{i-1}[x^{n-i}]F_{n-1}(x) ]

    T2
    数据结构
    其实关于很具体的证明不是很简单。
    但是可以说一下大概的思路。
    (low(x))(x)(K)进制下最低位是谁(那一位是第多少位),(lowbit(x))位最低位上的数。
    然后关于(k)的讨论其实并不只限于奇偶。
    (k=(2x+1)2^p)
    也就是说提出其中的所有2的因子。
    (y=(2x+1)2^q)
    这个时候的(y)有两种情况。

    [low(y+lowbit(y))= egin{cases} low(y)&qgeq p\ low(y)+1&q<p\ end{cases} ]

    其中第一种情况必然是一条链。
    因为其后继只有一个,原因是2关于(2x+1)必然存在逆元,后面的部分已经不互质了所以没必要管,而需要管的仅仅是前面的(2x+1),这样是存在逆元的。
    关于第二种情况,这种情况最多跳(log_kn)次因为一直在进位,而且每次进位最多跳(p)下然后再次进位。
    所以跳的次数最多不超过(plog_kn)
    等到不进位的时候就到了链上,我们可以用数据结构维护一波。
    然后还得维护一下在链上进位的次数。
    这个很好算,因为每次都加的是(K^{low(x)})那么多。
    所以次数就是:(frac{n}{K^{low(x)}})
    这样根据这个次数和(lowbit(x))可以唯一的确定出一个链头。
    我们链上倍增一下就可以找到链头了。
    这样子就知道该在哪个线段树里面操作了。
    然后暴力怎么维护就怎么维护就可以了,用动态开点比较好。

    T3
    (burnside)
    枚举循环节长度:
    (len)个长度为(frac{n}{len})的序列构成了长度为(n)环.
    (dp[n][m])长度为(n)的环满足(m)个染色的合法方案。

    [ans=frac{1}{|G|=n}sumlimits_{len|(n,m)}dp[frac{n}{len}][frac{m}{len}]varphi(len) ]

    然后考虑求(dp[n][m])
    我们考虑容斥插板。
    当前长度为(n)的环中(m)个被染成了金色。
    要求连续长度不能超过(K)
    那么我们强制第一个位置没有被染成金色,这样可以防止首尾相接造成的不合法情况。
    但是这个位置有(n)种选法,同时钦定的这个相当于编号了,而没有编号所以应该除掉(n-m)
    然后考虑容斥插板。
    枚举每一段的长度,可以得到一个长度为(n-m)的变量序列:
    ({x_i})满足(forall i,x_iin[0,k])
    同时有:

    [sumlimits_{i=1}^{n-m}x_i=m ]

    这样的话就可以直接玩插板容斥了。
    设得到的结果为(r),那么答案就是:(dp[n][m]=frac{n}{n-m}r)
    (O(sigma(n)))

  • 相关阅读:
    C#进行Visio二次开发之设备状态跟踪
    C#进行Visio二次开发之Shape的Data1、Data2、Data3的用处
    C#进行Visio二次开发之界面设计及架构设计
    Sqlserver常用函数例子说明
    香港生肖采集及规则分析软件
    使用NVelocity0.5实现服务器端页面自动生成
    C#进行Visio二次开发之判断图纸是否有设备
    C#进行Visio二次开发之图纸缩放操作的实现
    C#进行Visio开发的事件处理
    导线应力及弧垂计算相关资料
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/12332826.html
Copyright © 2020-2023  润新知