ARC144D AND OR Equation

ARC144D AND OR Equation

2022.07.18

洛谷:ARC144D AND OR Equation

Atcoder:ARC144D AND OR Equation

Solution

首先要读清题目,这里的数列 \(S=(f(0),f(1),...,f(2^N-1))\) 包含所有 \(f(k),k\in[0,2^N)\)

\(f(2^{i+1}+x)=f(2^{i+1})+f(x)-f(0)\)\(x\le 2^i\)

\(f(A)+f(B)=f(A\,\operatorname{and}\,B)+f(A\,\operatorname{or}\,B)\),且 \(x\)\(2^{i+1}\) 不重合,

必有 \(f(2^{i+1})+f(x)=f(0)+f(x+2^{i+1})\),移项可得。

\(f(x)=f(0)+\sum\limits_{2^i \&x}(f(2^i)-f(0))\)

\(y=2^{i+1}+x\),则 \(f(y)=f(2^{i+1})+f(y-2^{i+1})-f(0)\)

即:若 \(x\) 的最高位为 \(i\),则有 \(f(x)=f(x-2^i)+f(2^i)-f(0)\)

相当于就是把 \(x\)\(1\) 位给减掉,并每次加上贡献 \(f(2^i)-f(0)\)

减到最后剩下 \(f(0)\),因此要单独加上 \(f(0)\)

答案为满足 \(\sum\limits_{i=0}^{N-1}|x_i|\le K\)\(x\) 数列的数量。

由结论 \(2\),观察发现原 \(f\) 数列的取值仅与 \(f(0),f(1),f(2),f(4),...f(2^{N-1})\) 这些 \(f(2^{i})\) 项有关。

\(w_i=f(2^i)-f(0)\),则 \(f(x)=f(0)+\sum\limits_{2^i \&x}w_i\)

相当于我们构造出来了一个新的数列 \(w=\{w_0,w_1,...,w_{N-1} \}\)

根据正负性分类,

对于整个 \(w\) 数列,假设 \(s^{-}\) 表示 \(<0\)\(w_i\) 的和,\(s^{+}\) 表示 \(>0\)\(w_i\) 的和,

由于要满足 所有 \(f(x)\) 都要满足 \(f(x)\in[0,K]\),且由于自变量取值为连续整数,

所以 一定存在 某个 \(f(x)\)\(\sum\limits_{2^i \&x}w_i=s^{-}\),且 一定存在 某个 \(f(x)\)\(\sum\limits_{2^i \&x}w_i=s^{+}\)

我们只需要满足 极端情况 即可。

也就是说,原限制等价于:\(f(0)+s^{-}\ge 0\)\(f(0)+s^{+}\le K\)

合并得 \(-s^{-}\le f(0) \le K-s^{+}\)

只要该不等式的解集非空,则范围内的 \(f(0)\) 一定都满足条件。

即我们只需要让 \(K-s^{+}\ge -s^{-} \iff s^{+}-s^{-}\le K\)

\(s^{+}-s^{-} \ge 0\),因此我们只用考虑上界。

不难发现 \(s^{+}-s^{-}=\sum\limits_{i=0}^{N-1}|w_i|\),因此原问题转化为 \(\sum\limits_{i=0}^{N-1}|w_i|\le K\)


现在计算答案。

来到了纯组合计数部分。

\(w\) 数列中有 \(n\) 个非零数,方案数为 \({{N}\choose{n}}\)。这样一来,其余所有 \(0\) 只有一种选取方案,只用考虑非零数。

每个非零数有正负两种取值,因此乘上 \(2^n\)

我们还需要乘上一个数:对 \(n\) 个正数(非零数的绝对值)赋值的方案数,使得他们的和 \(\le K\)

这个跟有道题有异曲同工之妙,那个题的形式是这样的:求 \(\sum\limits_{i=1}^k(x_i+y_i)\le n\) 的方案数。、

那个不用考虑非零,因此将左边加一个非负数 \(z\),使得 \(z+\sum\limits_{i=1}^k(x_i+y_i)= n\)。然后进行插板法,由于有 \(2k+1\) 个数,且可以为 \(0\),因此直接处理是可行的,答案为 \({{n+2k}\choose{2k}}\)

这个不一样,他要求 \(|w_i|>0\)。我们设这些绝对值的数列为 \(\{x_1,x_2,...,x_n \}\)

并且,每一种合法情况其实是对应着取值不同的 \(f(0)\),我们其实是要加上 \(f(0)\),而不仅仅只是对于一种合法情况仅计数 \(1\)。由上面,\(f(0)\) 的取值数为 \(K-s^{+}+s^{-}+1=K-(s^{+}-s^{-})+1=K-\sum\limits_{i=1}^{n}x_i+1\)

所求为: \(\sum\limits_{x}(K-\sum\limits_{i=0}^{n}x_i+1)[\sum\limits_{i=0}^{n}x_i\le K]\)

如果仅仅是求 \(\sum\limits_{x}[\sum\limits_{i=1}^{n}x_i\le K]\),只需将 \(\sum\limits_{i=1}^{n}x_i\le K\) 转化为 \(a+\sum\limits_{i=1}^{n}x_i = K+1\)。注意加一,因为 \(a>0\)

而这道题对于 \(S=\sum\limits_{i=1}^{n}x_i\),还要加上 \(a+\sum\limits_{i=1}^{n}x_i=K\)\(a+\sum\limits_{i=1}^{n}x_i\le K-1\),...,\(a+\sum\limits_{i=1}^{n}x_i\le S+1\)

可以考虑直接记作 \(a+ \sum\limits_{i=1}^n x_i \le K+1\),因为对于一个 \(S\),所有满足条件的不等式都应该被统计一遍。

然后这个就可以用上面的那种方法转成等号进行插板,即求 \(a+b+\sum\limits_{i=1}^nx_i=K+2\)\(x\) 方案数。

这个方案数为:\({{n+1}\choose{K+1}}\)

于是最终答案为:

\[\sum\limits_{n=1}^{N}2^{n}{{N}\choose{n}}{{K+1}\choose{n+1}} \]

不要怕 \(K\) 很大,由于 \(N\) 很小,因此可以 \(O(N)\) 枚举计算。

于是我一定记住了这样一种处理方法:通过增加变量建立等量关系,运用基础方法解决组合计数。

Summary

做这道题对我的意义还是比较大的。我相信了这一个月来,对具体数学组合部分的阅读并不只是对公式的满足,而是真正的组合数学,组合意义背后的涵义。

我也开始坚信见多识广的好处,从这道题里,我能看见很多我未曾设想的事物,他们并不是我不能接触的,不过是我没有接触的。

如何才能不盲目地探索?

我知道这仍是一条未知的道路。

爆淦 7h。 完。

code ARC144D

posted @ 2022-11-08 13:00  Schucking_Sattin  阅读(13)  评论(0编辑  收藏  举报