Distance Between Sweethearts
题目
给定六个不大于 $2000$ 的整数,$UI_{g},UA_{g},UG_{g},UI_{b},UA_{b},UG_{b}$,
求和:$\max{|I_b-I_g|,|A_b-A_g|,|G_b-G_g|}\bigoplus I_b\bigoplus A_b\bigoplus G_b\bigoplus I_g\bigoplus A_g\bigoplus G_g$,且满足:
$I_{g}\in{0,UI_{g}},A_{g}\in{0,UA_{g}},G_{g}\in{0,UG_{g}}$
$I_{b}\in{0,UI_{b}},A_{b}\in{0,UA_{b}},G_{b}\in{0,UG_{b}}$
题解
那个 $\max$ 比较烦人,把那个 $\max$ 扔掉,假设为 $k=\max{x,y,z}$。
要求出 $f_i$,表示在最大值为 $k$ 的情况下 $I_b\bigoplus A_b\bigoplus G_b\bigoplus I_g\bigoplus A_g\bigoplus G_g=i$ 的方案数。
但这样显然没法做,因为我们无法确定最大值是否为 $k$。
为了确定最大值为 $k$,我们可以利用 $[1,k-1]$ 的答案。
也就是把 $f_i$ 的状态改为 :在最大值 $\leq k$ 的情况下 $I_b\bigoplus A_b\bigoplus G_b\bigoplus I_g\bigoplus A_g\bigoplus G_g=i$ 的方案数。
把六个异或的顺序改一改:$(I_b\bigoplus I_g)\bigoplus (G_b\bigoplus G_g)\bigoplus (A_b\bigoplus A_g)=i$
只需要看统计 $I_b\bigoplus I_g$ 的出现次数($G,A$ 同理),然后 $\mbox {FWT}$ 就可以了。
此时可以把 $I_b,I_g$ 相差不超过 $k$ 的统计一下就好了。
时间复杂度 $O(n^2\log n)$
程序
1 |
|