海蜇?海蜇!

题意

把题面搬这里

细节

  • 仅关键点范围在\(\{0,...,d-1\}\)
  • 本身值域是无限的
  • \(a_i\le 2.5\times 10^5\),这说明\(20\)维,\(d=4\)时,实际关键点高维是\(0\)...这里坑死了...

做法

下面讨论\(d=4\)的情况
若以原点出发,本质不同的关键点是不多的,记一个点为状态\(\{d_0,d_1,d_2,d_3\}\),走\(K\)步的方案为\(dp_{b_1,b_2,b_3}\)
在处理\(dp\)数组前,先预处理一些东西

  • \(f_{i,j,k}\)为在\(j\)维空间中,从原点走\(k\)步到\((i,i,...,i)\)的方案数

\[f_{i,j,k}=\sum\limits_{x}f_{i,j-1,k-x-(x+i)}{k\choose x+x+i}{x+x+i\choose x} \]

  • \(h_{i,j}\)为只考虑\(b_0,...,b_i\)下,走\(j\)步到达该点的方案数

\[h_{i,j}=\sum\limits_{k}h_{i-1,j-k}\times f_{i,b_i,k}\times {j\choose k} \]

  • \(g_i\)为走恰好\(i\)步到达\(\{b_0,b_1,b_2,b_3\}\)

\[g_i=h_{d,i}-\sum\limits_{j}g_j\times f_{0,20,i-j} \]

\(dp_{b_1,b_2,b_3}=\sum\limits_{i}g_i\times 40^{K-i}\)
然后\(O(N^2)\)算坐标差就好了

考虑优化算差过程
在手玩\(d=2\)时发现是异或,如果凭直觉\(d=4\)也是异或就全完了...
定义\(\oplus\)为差运算,实际对于某一位来说,是算\(|a_i-b_i|\)
对数组定义\(\oplus\)\(a=f\oplus g\):$$a_{x}=\sum\limits_{i,j}[i\oplus j=x]f_i\times g_j$$

\(d\)进制下,记\(a_i\)为数组\(a\)最高位为\(i\)的子数组,有
\(\begin{aligned}\\ a_0&=f_0\oplus g_0+f_1\oplus g_2+f_3\oplus g_3\\ a_1&=f_0\oplus g_1+f_1\oplus g_0+f_1\oplus g_2+f_2\oplus g_1+f_2\oplus g_3+f_3 \oplus g_2\\ a_2&=f_0\oplus g_2+f_2\oplus g_0+f_1\oplus g_3+f_3\oplus g_1\\ a_3&=f_0\oplus g_3+f_3\oplus g_0\\ \end{aligned}\)

\(x'=(f_0+f_1+f_2+f_3)\oplus (g_0+g_1+g_2+g_3),~~y'=(f_0-f_1+f_2-f_3)\oplus (g_0-g_1+g_2-g_3)\)
\(x=a_0+a_2=(x'+y')/2,~~y=a_1+a_3=(x'-y')/2\)

类似的,可以将\(a_0,a_2\)\(a_1,a_3\)分开
复杂度\(T(n)=O(N)+6T(N/4)=N^{log_46}\)

posted @ 2020-02-29 11:09  Grice  阅读(169)  评论(0编辑  收藏  举报