首页 > 其他分享 >Solution Set -“似一捧细泉的奔逃”

Solution Set -“似一捧细泉的奔逃”

时间:2023-02-09 23:12:04浏览次数:56  
标签:lfloor Set frac sum OurOJ Solution rfloor alpha 细泉

目录

\[\mathfrak{Defining~\LaTeX~macros\dots} \require{\cancel} \newcommand{\vct}[1]{\boldsymbol{#1}} \newcommand{\lca}[0]{\operatorname{lca}} \]

0.「OurOJ #47912」优美的分配方案

  Private link & Submission (忘交了).

  给定含有 \(n\) 个点 \(m\) 条边的简单无向图 \(G\), 将 \(1\sim m\) 分配给 \(m\) 条边作为边权. 求所有前 \(n-1\) 条边恰为 MST 的 \(G\) 的 MST 边权和之和.

  \(n\le20\).


  • 「A.DP-计数 DP」「A.数学-组合计数」

  想看 GF 的可以散了, 都说了兔是组合意义选手. (

  不难转化成: 有 \(m\) 个空位 (权值) 排成一行, 要填入 \(m\) 个球 (边), 对于球 \(i\in[1,n)\), 有限制集合 \(R_i\), 表示 \(R_i\) 内的所有球必须在 \(i\) 之后, 注意有 \(\min R_i\ge n\). 求所有合法方案中, 前 \(n-1\) 个球的位置标号和.

  先来想想怎么求合法方案数. 作为一个成熟的组合意义选手, 我们可以很快构造一个等价合法且不重不漏的放球规则. 令 \(f(S)\) 表示 \([1,n)\) 内填了 \(S\), \([n,m]\) 内填了所有可填的数 (记为 \(R_S\)) 的方案. 枚举一个 \(u\) 加入 \(S\), 我们先将 \(u\) 填入最左侧的空位, 再随便选 \(R_u\setminus R_S\) 的位置即可. 因此

\[f(S\cup\{u\})\overset{+}{\longleftarrow}\frac{(m-|R_S|-|S|-1)!}{(m-|R_{S\cup\{u\}}|-|S|-1)!}f(S). \]

  怎么表示权值呢? 作为一个成熟的组合意义选手, 我们首先发现 "标号和之和" 只有加法, 可以分开算贡献. 标号还是转化成方案更好算, 自然想到用特殊球标记球 \(i\) 前的一个位置, 就能将球 \(i\) 的标号转为方案. 具体地, 我们新增一个空位和一个特殊球. \(f(S,0/1)\) 标记特殊球是否被放置. 不涉及特殊球放置的转移是一样的:

\[f(S\cup\{u\},0)\overset{+}{\longleftarrow}\frac{(m-|R_S|-|S|)!}{(m-|R_{S\cup\{u\}}|-|S|)!}f(S,0), \\ f(S\cup\{u\},1)\overset{+}{\longleftarrow}\frac{(m-|R_S|-|S|-1)!}{(m-|R_{S\cup\{u\}}|-|S|-1)!}f(S,1). \]

如果放特殊球, 规则为: 先将特殊球前置, 再将 \(u\) 前置, 最后乱选其他球. 此时特殊球会对 \(n-1-|S|\) 个 \(i\) 贡献, 需要额外乘系数. 因而

\[f(S\cup\{u\})\overset{+}{\longleftarrow}\frac{(m-|R_S|-|S|-1)!}{(m-|R_{S\cup\{u\}}|-|S|-1)!}\cdot(n-1-|S|)f(S,0). \]

  答案即 \(f(U,1)\). 复杂度 \(\mathcal O(n2^n)\).

1.「OurOJ #47927」海之女仆

  Private link & Submission.

  假设一个有重力的二维世界, \(x<1\) 和 \(x>n\) 处是无穷高的山, \(x\in(i,i+1)\) 处下方有 \(h_i\) 体积 (还是别叫面积, 有点怪) 的山, 山上有 \(d_i\) 体积的水. 求至少削掉多少体积的山头, 才能让所有水域连通. 求出答案下确界.

  数据组数 \(T\le10\), \(\cancel{n\le5\times10^3}~n\le10^5\), \(0\le d_i,h_i\le10^3\), 绝对精度要求 \(\epsilon=10^{-4}\).


  • 「A.分治-二分答案」「B.贪心」「C.性质/结论」

  被 T1 卡了, 没发现 T2 不难, 走投无路把 T3 一眼了. () 不过锤标算的做法还是挺有意思的.

  显然最终海平面关于最小费用具有单调性, 可以二分海平面 \(H\). 细节之处在于二分后的贪心.

  考虑最终山的状态: 左右原本就有未被水淹没的山, 我们一开始就能忽略它们; 左右还有一些山高于海平面, 它们肯定无法被淹没, 所以不必被削平, 只需要削出一个峡谷状的山脉 (即, 左边削成前缀最小值, 右边削成后缀最大值), 让水洼里的水流入海中; 除去这些山, 剩下的都是海底山脉, 把高出海平面的山恰好削到海平面即可. 这是削去体积最小的策略, 自然也是水量需求最小的策略. 我们只需要检查所有水能否填满海平面以下的空间即可.

  复杂度 \(\mathcal O(Tn\log(h_\max/\epsilon))\).

2.「OurOJ #47950」中档题

  Private link & Submission (忘记交 OJ, 现在交不了啦).

  给定序列 \(\{a_n\},\{c_n\}\), 生成一棵树, 对于 \(i\in[2,n]\), \(i\) 的父亲在 \([1,i-1]\) 中正比于 \(a\) 值随机生成, 边权为两端点 \(c\) 点权和. 询问 \(q\) 次两点距离期望. 答案模大素数.

  \(n,q\le10^6\).


  • 「A.DP-概率/期望 DP」「A.数学-生成函数」

  兔是一个组合意义选手, 所以也许她写出来的题解巧妙了你一脸, 但她自己也得酝酿很久. (

  「方法一」 本来尝试常规思路, 枚举 LCA, 求形如 \(E(d_u)+E(d_v)-2E(d_{\lca(u,v)})\) 的东西, 但是发现事件独立性的讨论挺烦人的, 我们不妨换个思路: 对 \(u,v\) 一起向 LCA 爬树的过程求解.

  不妨设 \(u<v\), 注意到 \(v\) 在跳到 \([1,u]\) 之前一定不会与 \(u\) 相遇, 且经过边权显然和 \(u\) 无挂. 方便起见, 我们只算路径上除 \(u,v\) 外的点权和期望. 记 \(s_x=\sum_{i\le x}a_i\), 对于 \(w\in(u,v)\), \(w\) 是 \(v\) 的祖先的概率显然是 \(a_w/s_w\). 因而 \(v\) 爬到 \(u\) 之前经过的点权期望为 \(\sum_{w\in(u,v)}a_wc_w/s_w\). 令 \(g(u)=\sum_{i=1}^ua_ic_i/s_i\), 该期望即 \(g(v-1)-g(u)\).

  剩下的爬树过程? \(v\) 一定处于 "爬到 \([1,u]\) 中某一点" 这个状态, 实际上只有 \(u\) 一个变量, 可以 DP 了. 令 \(f(u)\) 表示此时还需要经过的点权期望. 枚举 \(v\) 落在 \([1,u]\) 中的位置, 可知

\[f(u)=\frac{1}{s_u}\sum_{v=1}^{u-1}a_v(f(v)+g(u-1)-g(v)+c_v). \]

中间的东西拆开求前缀和即可. 线性求逆元可以做到 \(\mathcal O(n+q)\). (

  「方法二」 去问 crashed 他的做法的时候发现是原题, 然后找到了自己的题解 (大嘘). 这是求 LCA 的方法. 不知道为什么考场上觉得这个有问题, 大概是写错了?

  「方法三」 然后这个是 crashed 的方法, 可以看出兔和蛋的数学偏好差异. (

  还是算点权和, 不妨设 \(u<v\). 令 \(F_w(z;u,v)\) 表示以 \(w\) 为 LCA 时, 路径出现概率关于其点权和的 GF. 那么

\[F_u(z)=\frac{a_u}{s_{v-1}}\prod_{i\in(u,v)}\left(1+\frac{a_i}{s_{i-1}}z^{c_i}\right), \]

注意 \(a_i\) 是上一步的分子, \(s_{i-1}\) 是下一步的分母. 这里 \(w=u\) 是特殊情况, 当 \(w<u\) 时, \((w,u)\) 直接的点既可以被 \(u\) 爬到, 也可以被 \(v\) 爬到, 所以要复杂一点:

\[F_w(z)=\frac{a_w^2z^{c_w}}{s_{u-1}s_{v-1}}\prod_{i\in(w,u)}\left(1+\frac{2a_i}{s_{i-1}}z^{c_i}\right)\prod_{i\in(u,v)}\left(1+\frac{a_i}{s_{i-1}}z^{c_i}\right). \]

  最终答案即 \(\sum_{w\in[1,u]}F_i'(1)\). 导一导算一算即可, 也是线性的.

3.「OurOJ #47933」坐标

  Private link & Submission.

  给定 \(n\) 个 \(\mathbb Z^2\) 上的点 \(\{(x_i,y_i)\}\), 构造正整数序列 \(\{a_m\}\) 和向量阵 \(\{\vct v_{n\times m}\}\), 要求 \(m\le40\), \(\vct v_{ij}\in\{(0,1),(1,0),(0,-1),(-1,0)\}\), 且 \((x_i,y_i)=\sum_ja_j\vct v_{ij}\).

  \(n\le10^3\), \(|x_i|,|y_i|\le10^9\).


  • 「A.构造」

  一道有意思的构造题, 不过 \(4\log n\approx m\) 这个实际上没有用的观察还是太迷惑人了.

  判无解: \(x+y\) 奇偶性不同则无解, 很显然.

  如果是在数轴上构造? 简单的想法是构造一列 \(2^k\), 然后让对每个点贪心地向 \(0\) 靠近. 不过这样的分别构造的思路很容易被否定: \(2^{20}\times2^{20}\) 容纳不了点的信息! (不过这个判断会被 \(4\log n\approx m\) 迷惑, 可恶啊).

  由此, 第一个 motivation: 同时构造两维坐标.

  不妨令 \(x,y\ge0\), 我们最终可以对它们进行一些加减, 最终让它们变为 \(0\).

  再试试二进制构造? 我们很快发现, 因为不能让提供一个 bit 两次 (不然和分开构造没有区别), 则当 \(x,y\) 含有同一 bit 时, 将会很难处理.

  由此, 第二个 motivation: 保持 \(x,y\) 的 bit (或某一特定 bit) 不同时为 \(1\).

  例如, 保持最高 bit 不同. 归纳地, 我们可以先用 \(2^{30}\) 作用于较大者, 并从 \(2^{29}\) 开始考虑. 设当前的 \(d=2^k\), \(|x|\ge|y|\), 则我们对 \(x\) 操作, \(x\gets d-x\) (并不关心符号), 注意到此时低一位仍然满足条件. 特别地, \(2^0\) 处需要用两个 \(2^0\) 调整. 最终至多使用 \(32\) 步完成构造. (如果要求 \(m\le32\) 说不定还简单一点.)

4.「OurOJ #47935」上升

  Private link & Submission.

  给定一棵含有 \(n\) 个结点的带点权树. 删除一个结点及其邻接边, 最小化在剩下的森林中, 所有简单路径对应点权序列的 LIS 长度最大值. 求出这一最小化的最大值.

  \(n\le5\times10^5\).


  • 「A.树论-长链剖分」「B.Tricks」

  考完给 Walking_Dead 传授正解, 突然发现这算是一个比较有意义的 trick.

  取出一条包含全局 LIS 的路径 \((x,y)\), 显然, 最优删除位置在这条路径上.

  "枚举树上的点" \(\to\) "枚举路径上的点", 在遍历枚举点 \(u\) 的邻接连通块求答案时, 这个连通块一定是 \(x\) 为根时的某棵子树, 或者 \(y\) 为根时的某棵子树. 仅仅用这个性质, 我们就能规避换根, 而只需要求子树答案了.

  接下来的工作挺简单. 长剖, 维护子树内 LIS 末尾最小值和 LDS 末尾最大值, \(\mathcal O(n\log n)\) 处理一次. 先以任意点为根求全局答案, 取出一个 \(x\), 再以 \(x\) 为根求子树答案顺便取出一个 \(y\), 最后以 \(y\) 为根求子树答案. 然后枚举 \(w\) 求最终结果即可. 复杂度 \(\mathcal O(n\log n)\).

5.「OurOJ #47947」数划分

  Private link & Submission.

  给定序列 \(\{a_n\}\), 求将 \([1,n]\) 划分为连续不交区间的方案数, 使得每个划分区间 \([l,r]\) 都有 \(\min_{i=l}^r\{a_i\}\le r-l+1\le\max_{i=l}^r\{a_i\}\). 答案模大素数.

  \(n\le5\times10^5\).


  • 「A.分治-CDQ 分治」「A.启发式合并/分裂」

  题不难, 只是记录一下兔犯傻的过程.

  尝试序列 DP. 令 \(f(r)\) 表示划分 \([1,r]\) 的方案数. 对于固定的 \(r\), 枚举最后一个区间的左端点 \(l\), 则其需要满足

\[(\exists~i\in[l,r],~a_i\le r-l+1)\land(\exists~i\in[l,r],~a_i\ge r-l+1). \]

自然的想法是考察合法 \(l\) 的单调性. 分别考虑 \(\forall i,~a_i>r-l+1\) 和 \(\forall i,~a_i<r-l+1\) 两种情况. 注意到当 \(l\) 不断减小时, 前者存在单调性而后者不存在. 怎么办呢?

  兔傻就傻在, 把 \(\min/\max\) 转化成 \(\exists/\forall\) 之后, 忘记了原本 "最值" 的可枚举性. 既然有一个东西不单调, 我们直接对这个条件启发式分裂做 CDQ 就行了. 这里就直接对区间最大值启发式分裂, 在跨中心转移时, 前一个条件可以枚举端点后二分, 后者仅仅是对转移端点进行一个常量的限制, 很好处理. 那么就 \(\mathcal O(n\log^2n)\) 无脑完成了. 当然, 存在 \(\mathcal O(n\log n)\) 的解法.

6.「OurOJ #47954」数区间集

  Private link & Submission.

  给定序列 \(\{a_n\}\), 求 \(|\{\{a_i\}_{i=l}^r\}_{[l,r]\subseteq[1,n]}|\).

  \(n\le5\times10^5\), 保证任何一个数在 \(\{a_n\}\) 中出现不超过两次.


  • 「A.扫描线」「C.性质/结论」

  难点大概是设计一个去重策略, 除此之外都很清纯.

  对于 \(a_i\), 若 \(a_i\) 在另一个位置 \(j\) 出现, 则令 \(p_i=j\), 否则令 \(p_i=+\infty\). 我们首先计数这样的区间 \([l,r]\): \(p_{l-1}\notin[l,r]\land p_{r+1}\notin[l,r]\), 也即使关于出现集合的极长区间. 扫描线轻松实现. 虽然这样算还是会重, 不过我们得到了一个重要的条件: 若极长区间 \([l_1,r_1],[l_2,r_2]\) 出现集合相同, 则这两个区间不交且不邻, 证明显然.

  发现了这个性质, 后续对算重的区间的描述就变得清晰了. 对于极长的 \([l_1,r_1]\), 若其被重复计数, 则必然满足 \(\{p_i\}_{i=l_1}^{r_1}=[l_2,r_2]\), \([l_1,r_1],[l_2,r_2]\) 不交不邻 (逆用结论), 且它仅在 \([l_2,r_2]\) 处被算重一次. 对这种东西的维护实在是经典: 扫描 \(l\), 在 \(r\) 处维护 \(\max_{i=l}^r\{p_i\}-\min_{i=l}^r\{p_i\}-(r-l)\), 线段树维护区间最小值和出现次数, 单调栈维护最值并对应地区间加减即可. 不邻的条件在最大值栈上二分一下就行.

  两部分复杂度都是 \(\mathcal O(n\log n)\).

7.「CF 1770F」Koxia and Sequence

  Link & Submission.

  对所有 \(\sum_{i=1}^na_i=x\), \(\bigvee_{i=0}^na_i=y\) (\(\vee\) 为按位或), 求 \(\{a_n\}\) 异或和的异或和.

  \(n<2^{40}\), \(x<2^{60}\), \(y<2^{20}\).


  • 「A.数学-数学推导」「C.思维」

  精巧的转化! 这种步步手筋的题真的厉害.

  明显, "异或和" 指向奇偶性, 而方案数里必然涉及组合数, 它们共同指向 Lucas 定理. 这是破题关键.

  首先, 若枚举异或和的贡献 bit \(i\), 要求 \(i\) 出现奇数次, 且方案数为奇数. 则出现次数 \(c\bmod2=1\) 又 \(\binom{n}{c}\bmod2=1\). 所以 \(n\bmod 2=0\) 时答案为 \(0\). 以下考虑 \(n\bmod2=1\) 的情况… 先别急, 奇数 \(n\) 减去 \(1\) 就是偶数, 这意味着当 \(a_1\) 固定时, 后续 \(a_{2..n}\) 对答案的总贡献也为 \(0\). 最终只需要考虑 \(n\bmod2=1\) 时 \(a_1\) 的贡献.

  现在, 摆在面前的有 \(\sum a_i=x\) 和 \(\bigvee a_i=y\) 两个限制. 相对来说, 后者是一个集合形式的要求, 方便容斥. 设 \(f(t)\) 表示 \((\bigvee a_i)\subseteq t\) (\(\subseteq\) 表示二进制表示下的子集关系) 时的答案, 就有

\[\textit{ans}=\sum_{t\subseteq y}(-1)^{|y|-|t|}f(t), \]

异或和, 位独立! 又有

\[\textit{ans}=\bigoplus_{t\subseteq y}f(t), \]

而 \(t\) 是可枚举的, 我们只需要求出每个 \(f(t)\).

  列出式子:

\[f(t)=\sum_{i\in t}2^i\left(\sum_{\sum a_i=x-2^i}[a_1\subseteq(t-2^i)][a_2\subseteq t]\cdots[a_n\subseteq t]\bmod 2\right). \]

\(\binom{a}{b}\bmod 2=1\Leftrightarrow a\subseteq b\), 后者连乘是单纯的逻辑与, 前者连乘可是妇孺皆知的可算! 右向左变形, 代入得:

\[\begin{aligned} f(t) &= \sum_{i\in t}2^i\left(\sum_{\sum a_i=x-2^i}\binom{t-2^i}{a_1}\binom{t}{a_2}\cdots\binom{t}{a_n}\bmod2\right) \\ &= \sum_{i\in t}2^i\left(\binom{nt-2^i}{x-2^i}\bmod2\right) \\ &=\sum_{i\in t}2^i[(x-2^i)\subseteq(nt-2^i)]. \end{aligned} \]

\(\mathcal O(y\log y)\) 计算即可.

8.「洛谷 P5172」Sum

  Link & Submission.

  给定 \(T\) 组 \(n,r\), 分别求出 \(\sum_{d=1}^n(-1)^{\lfloor d\sqrt r\rfloor}\).

  \(T\le10^4\), \(n\le10^9\), \(r\le10^4\).


  • 「A.数学-类欧几里得」「A.数学-数学推导」

  只考虑 \(r\) 非完全平方数的情况.

\[\begin{aligned} \textit{ans} &= \sum_{d=1}^n(1-2(\lfloor d\sqrt r\rfloor\bmod2)) \\ &= \sum_{d=1}^n\left(1-2\left(\lfloor d\sqrt r\rfloor-2\left\lfloor\frac{d\sqrt r}{2}\right\rfloor\right)\right), \end{aligned} \]

令 \(f(n,\alpha)=\sum_{i=1}^n\lfloor\alpha i\rfloor\), 则

\[\textit{ans}=n-2f(n,\sqrt r)+4f(n,\sqrt r/2). \]

  来推导 \(f\), 有点类似类欧, 需要一点讨论. 当 \(\alpha\ge1\) 时,

\[f(n,\alpha)=f(n,\{\alpha\})+\frac{n(n+1)}{2}\lfloor\alpha\rfloor. \]

当 \(\alpha<1\) 时:

\[\begin{aligned} f(n,\alpha) &= \sum_{i=1}^{\lfloor\alpha n\rfloor}\sum_{j=1}^n[i\le\alpha j] \\ &= \sum_{i=1}^{\lfloor\alpha n\rfloor}\sum_{j=1}^n[i<\alpha j]\quad(\alpha\notin\mathbb Q) \\ &= \sum_{i=1}^{\lfloor\alpha n\rfloor}\sum_{j=1}^n\left[\frac{i}{\alpha}<j\right] \\ &= n\lfloor \alpha n\rfloor-\sum_{i=1}^{\lfloor\alpha n\rfloor}\left\lfloor\frac{i}{\alpha}\right\rfloor. \end{aligned} \]

不好办了. 为了让递归进行, 我们猜测恒有 \(\alpha=\frac{a\sqrt r+b}{c}\) 的形式. 对 \(f(n,a,b,c)\) 继续化简:

\[\begin{aligned} n\lfloor \alpha n\rfloor-f(n,a,b,c) &= \sum_{i=1}^{\lfloor\alpha n\rfloor}\left\lfloor\frac{i}{\frac{a\sqrt r+b}{c}}\right\rfloor \\ &= \sum_{i=1}^{\lfloor\alpha n\rfloor}\left\lfloor\frac{ic}{a\sqrt r+b}\right\rfloor \\ &= \sum_{i=1}^{\lfloor\alpha n\rfloor}\left\lfloor\frac{c(a\sqrt r-b)i}{a^2r-b^2}\right\rfloor \\ &= f(\lfloor\alpha n\rfloor,ac,-bc,a^2r-b^2). \end{aligned} \]

  综上呐,

\[f(n,a,b,c)=\begin{cases} \frac{n(n+1)}{2}\lfloor\alpha\rfloor+f(n,a,b-c\lfloor\alpha\rfloor,c) & \alpha\ge1,\\ n\lfloor\alpha n\rfloor-f(\lfloor\alpha n\rfloor,ac,-bc,a^2r-b^2) & \alpha<1. \end{cases} \]

复杂度是 \(\mathcal O(T\log n)\) 喵? 不太会算.

标签:lfloor,Set,frac,sum,OurOJ,Solution,rfloor,alpha,细泉
From: https://www.cnblogs.com/rainybunny/p/17107445.html

相关文章