題意
做法
定義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\),且滿足:
(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])\)
總貢獻為
我們將\((\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)\)