海蜇?海蜇!
题意
把题面搬这里了
细节
- 仅关键点范围在\(\{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)\)的方案数
- \(h_{i,j}\)为只考虑\(b_0,...,b_i\)下,走\(j\)步到达该点的方案数
- \(g_i\)为走恰好\(i\)步到达\(\{b_0,b_1,b_2,b_3\}\)
\(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}\)