River Flow
定义函数 \(f_t(x)=\left\lfloor\dfrac{x}{2^t}\right\rfloor \bmod 2\),也就是周期为 \(2^{t+1}\) 的值域为 \([0,1]\) 的方波。
现在给你一个函数 \(g\) 的从 \([0,n)\) 的片段和参数 \(T\),问能不能找到若干组 \(k_i,t_i,b_i \in \mathbb{Z}\) 使得:
\[\forall x\in\mathbb Z\cap[0,n), g(x)=\sum_ik_if_{t_i}(x-b_i)
\]
要求 \(\max t_i \le T\),保证 \(2^T\le\frac n2\)。
如果能,构造一组方案最小化 \(\sum k_i\)。
\(1\le n\le10^6, 0 \le g(i) \le 10^9\)
先取出这个函数长为 \(2^{T+1}\) 的任意一部分,剩下的部分必然是循环的,因为 \(f_{t_i}\) 的循环节 \(\le 2^{T+1}\)。
对整个函数作差分,\(\Delta f_t(x-b)\) 会在 \(k2^{t}+b\) 处对 \(\Delta g\) 贡献 \((-1)^k\)。
考虑这么一个值:
\[G_t(b)=\sum_{k=0}^\infty \Delta g(2^{t+1}+b)-\Delta g(2^{t+1}+2^t+b)
\]
不难发现,假如 \(t' \neq t_0\),那么所有 \(f_{t'}(x-b)\) 对 \(G_{t_0}\) 的贡献是 \(0\)。
因此 \(G_{t_i}(b_i)\) 就是 \(\Delta f_{t_i}(x-b_i)\) 的系数 \(k_i\)。
依次检查并构造即可。
本文来自博客园,作者:CuteNess,转载请注明原文链接:https://www.cnblogs.com/CuteNess/p/19086487

浙公网安备 33010602011771号