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_i\le x_i\le r_i,i\in[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:对于\(i\ge 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\neq c_j),\vec{w_(i,j)}_{c_j}=1 \]


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

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

\[\sum\limits_{\lambda=0}^{limit}(\lambda \cdot n+j)(\prod\limits_{k=1,k\neq c_j}^D (len_k-\lambda\cdot n)) \]

我们将\((\lambda \cdot n+j)(\prod\limits_{k=1,k\neq c_j}^D (len_k-\lambda\cdot n))\)写成关于\(\lambda\)\(D\)次多项式\(F(\lambda)=\sum\limits_{k=0}^D f_k\lambda^k\)
那么总贡献为
\(\begin{aligned} \sum\limits_{\lambda=0}^{limit}F(\lambda)&=\sum\limits_{\lambda=0}^{limit}\sum\limits_{k=0}^D f_k\lambda^k\\ &=\sum\limits_{k=0}^D f_k\sum\limits_{\lambda=0}^{limit}\lambda^k\\ \end{aligned}\)

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

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

posted @ 2020-12-06 20:57  Grice  阅读(620)  评论(0编辑  收藏  举报