• NOIP2020微信步数


    题意

    luogu

    做法

    定义0(c_i,d_i)与题意中相同;令(D)为题意中的(k),即维数。

    定义1:令((i,j))为第(i)轮第(j)步。

    定义2:对于((i,j)),如果存在位置此时走出界限,则称其为最值。令最值集合为(S)

    定义3:令向量(vec{v})为一轮后各维的增量

    定义4:容易发现,(forall (i,j)in S)(exists {(l_1,r_1),(l_2,r_2),cdots,(l_k,r_k)})
    出界位置为:({(x_1,x_2,cdots,x_D)|l_ile x_ile r_i,iin[1,D]})(易得(l_{c_j}=r_{c_j}))。
    令向量(vec{w_{i,j}}={r_1-l_1+1,r_2-l_2+1,cdots,r_D-l_D+1})


    结论1:对于(ige 3),若(forall (i,j)in S),则((i-1,j)in S),且满足:

    [vec{w_{i,j}}_k=vec{w_{i-1,j}}_k+vec{v}_k(k eq c_j),vec{w_(i,j)}_{c_j}=1 ]


    (1)
    对于(i=1)((i,j)in S),其贡献为(j(prodlimits_{k=1}^{D}len_k))

    (2)
    对于(i=2)((i,j)in S),令(len_k=vec{w_{i,j}}_k),其贡献为((n+j)(prodlimits_{k=1}^{D} len_k))
    根据结论1,若((i+lambda,j)in S),其贡献为((lambdacdot n+j)(prodlimits_{k=1,k eq c_j}^D (len_k-lambdacdot n)))
    根据结论1,(exists limit,s.t.~(i+lambda,j)in S(lambdain[0,limit]))
    总贡献为

    [sumlimits_{lambda=0}^{limit}(lambda cdot n+j)(prodlimits_{k=1,k eq c_j}^D (len_k-lambdacdot n)) ]

    我们将((lambda cdot n+j)(prodlimits_{k=1,k eq c_j}^D (len_k-lambdacdot n)))写成关于(lambda)(D)次多项式(F(lambda)=sumlimits_{k=0}^D f_klambda^k)
    那么总贡献为
    (egin{aligned} sumlimits_{lambda=0}^{limit}F(lambda)&=sumlimits_{lambda=0}^{limit}sumlimits_{k=0}^D f_klambda^k\ &=sumlimits_{k=0}^D f_ksumlimits_{lambda=0}^{limit}lambda^k\ end{aligned})

    具体讲一下代码流程:
    (O(nD))((i=1,j)in S)的贡献
    (O(D^2))预处理,(kin[0,D])的自然数幂和多项式系数
    (O(nD^2))((i=2,j)in S)(F(lambda))(O(nD^2))(sumlimits_{lambda=0}^{limits}F(lambda))

    总复杂度(O(nD^2))

  • 相关阅读:
    CSS知识点总结[部分]
    前端知识日常总结
    上传第三方jar包到nexus
    maven命令
    mac安装并配置nexus3.5.1版本
    前端解决跨域问题
    Package.json 属性说明
    nodejs日常总结
    log4j.properties总结
    Spring整合Hibernate
  • 原文地址:https://www.cnblogs.com/Grice/p/14094215.html
Copyright © 2020-2023  润新知