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)\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM