zoukankan      html  css  js  c++  java
  • 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))

  • 相关阅读:
    六大设计原则
    spring的文件上传应用
    web项目的分页
    自己尝试写web,网页上点击链接没反应,没有发出http请求。
    python3.6使用chardet模块总是报错ValueError: Expected a bytes object, not a unicode object
    chardet模块的安装:检查编码类型
    decode,encode的用法
    转:Unicode,UTF-8,UTF-16,UTF-32,gb2312,gbk区别
    js赋值运算符 && 自增自减
    js算数运算符
  • 原文地址:https://www.cnblogs.com/Grice/p/14094215.html
Copyright © 2011-2022 走看看