Solution Set - “如果惊蛰随梦远走”
- 0.「UR #15」「UOJ #226」奥林匹克环城马拉松
- 1.「UR #22」「UOJ #682」月球铁轨
- 2.「NOI Simu.」箭头
- 3.「CF 830E」Perpetual Motion Machine
- 4.「CF 1474F」1 2 3 4 …
- 5.「CF 1842H」Tenzing and Random Real Numbers
- 6.「UR #17」「UOJ #370」滑稽树上滑稽果
- 7.「SDOI 2019」「洛谷 P5362」连续子序列
- 8.「CTS 2019」「洛谷 P5404」重复
- 9.「CF 1842G」Tenzing and Random Operations
- 10.「SDOI 2018」「洛谷 P4605」物理实验
- 11.「NOI Simu.」流星雨
- 12.「LOJ #6289」花朵
- 13.「LOJ #6680」henry_y 的函数
- 14.「洛谷 P7390」造树
- 15.「CF 1098F」Ж-function
\quad\,\,\text{( ˃̵ ֊ ˂̵ )}\\
\text{つど}\quad
\newcommand{\str}[1]{\underline{\texttt{#1}}}
\newcommand{\addeq}[0]{\overset{+}{\gets}}
\newcommand{\op}[1]{\operatorname{#1}}
\newcommand{\lca}[0]{\op{lca}}
\]
*冷知识: Wfurent 有类似胡萝卜的植物, 但兔子们表示并不好吃.
0.「UR #15」「UOJ #226」奥林匹克环城马拉松
- Link & Submission.
- 「B.Tricks」
BEST 定理.
在有向图 \(G\) 中, 以 \(\deg(u)\) 表示点 \(u\) 的出度 (等于入度), \(T_r(G)\) 表示以 \(r\) 为根的外向 (或内向) 树形图数目, 则 \(G\) 的 Euler 回路数目为
\[T_r(G)\prod_{u\in V}(\deg(u)-1)!.
\]
大概就是先对给定的基环树定向, 然后数外向生成树. 因为树上定向方案是唯一的, 所以枚举环上任意一条边沿某个方向走的次数就能给全部边确定方向 (记得带上组合数选出重边子集). 数外向树的话, 只需要枚举环上哪条边被断掉, 树上贡献不变, 环上贡献的变化量 \(\mathcal O(1)\), 也可以算出来. 最终复杂度 \(\mathcal O(nt)\).
1.「UR #22」「UOJ #682」月球铁轨
- Link & Submission.
- 「A.数据结构-Trie」「C.性质/结论」
令 \(b_i\gets a_i\oplus b_i\), \(a_i\gets\bigoplus_{j=1}^ia_i\), 则区间 \([l,r]\) 的最优值为 \(a_r\oplus a_{l-1}\) 放入 \(\{b_l,\cdots,b_r\}\) 中异或得到的最大值. 令 \(B_{l,r}\) 表示 \(\{b_l,\dots,b_r\}\) 的张成空间, \(f(x,V)\) 表示 \(x\) 在空间 \(V\) 中异或出的最小值, \(g(x,V)\) 表示最大值. 则 \([l,r]\) 的贡献可以表示为 \(g(a_r\oplus a_{l-1},B_{l,r})\), 我们大概会二分答案 \(k\), 所以要完成的是形如 \(g(a_r\oplus a_{l-1},B_{l,r})\overset{?}{\le}k\) 的判断.
自由度太高了, 尝试把 \(a_r\oplus a_{l-1}\) 拆开再放入线性基. 注意到 \(g(x\oplus y,V)=f(x,V)\oplus g(y,V)\) (按位考虑, 可以看出左侧选出的基向量在右侧一定被选奇数次, 未选出的向量一定被选出偶数次). 据此, 我们大致的思路就是把 \(f(a_{l-1},B_{l,r})\) 建出 Trie 树, 然后用 \(g(a_r,B_{l,r})\) 上去查询答案. 虽然 \(B_{l,r}\) 仍然和两个端点相关, 但是固定一个端点时, 只有 \(\log V\) 种不同的 \(B\), 我们可以根据空间秩来区分它们, 对不同的秩分别建 Trie 树求解即可.
受限于空间, 没有办法保留整个 Trie, 我们考虑逐位确定答案, 这样 Trie 就只需要保留一层结点的相对位置关系. 右端点 \(r\) 到左端点 \(l\) 的贡献区间是单调移动的, 所以可以线性扫描贡献答案. 最终时间复杂度 \(\mathcal O(nm^2)\), 空间 \(\mathcal O(nm)\).
2.「NOI Simu.」箭头
我们可以把箭头在一开始就转一转拆成四个方向的具有使用代价的箭头, 此后就不需要考虑箭头的转向. 一个箭头可以更新一行或者一列上所有位置 (细致来说, 所有箭头起点) 的最短路. 这是坏事: 不能直接建图. 这也是好事: 结合所有 \(f\) 相同, 我们可以只更新里箭头的初始终点最近的两个箭头起点, 并标记它们可以以 \(f\) 的代价在行或列上任意行走. 这样实际松弛次数是 \(\mathcal O(n)\) 的, 最终复杂度 \(\mathcal O(n\log n)\).
时隔不知道多久, 终于存在有签到题的模拟赛了. 深中! 你是兔的天使!
3.「CF 830E」Perpetual Motion Machine
- Link & Submission.
- 「A.构造」
思路非常自然的题, 算得上是 educational? 深中! 你是兔的天使!
Observation A: 若存在一个结点 \(\deg\ge 4\), 令该点 \(a=2\), 其邻接点 \(a=1\), 合法.
Observation B: 若存在环, 令环上所有点 \(a=1\), 合法.
现在只需要考虑二叉树.
Observation C: 若存在两个连通的 \(\deg=3\) 的点, 令两点路径上 \(a=2\), 两点各自不在路径上的邻接点 \(a=1\), 合法.
现在只需要考虑存在至多一个 \(\deg=3\) 的点的树. 不妨以 \(\deg(r)=3\) 的 \(r\) 为根, \(L_1,L_2,L_3\) 分别表示三条连上的结点编号. \(|L_1|\le|L_2|\le|L_3|\).
Observation D: \(|L_1|\ge2\) 时, \(a_r=3\), 三条链分别构造 \([2,1],[2,1],[2,1]\), 合法.
现在只需要考虑 \(|L_1|=1\). 这下不太好 observe 了, 写个暴搜再说.
Case E: \(|L_2|\ge3\) 时, \(a_r=3\), 三条链分别构造 \([2],[3,2,1],[3,2,1]\), 合法 (硬搜结论).
现在只需要考虑 \(|L_1|=1,|L_2|\le2\) 的情况.
Case F: \(|L_3|\ge 5\) 时, \(a_r=6\), 三条链分别构造 \([3],[4,2],[5,4,3,2,1]\), 合法 (硬搜结论).
ABCDEF 六种情况拍上去就过了, \(\mathcal O(n)\) 或者 \(\mathcal O(n\alpha(n))\). 我们理应证明其他情况无解, 但兔的数学只有高中学考水平, 再见!
4.「CF 1474F」1 2 3 4 …
- Link & Submission.
- 「C.性质/结论」
任意 LIS 都是连续上升的整数列. 设 \(s\) 为 \(a\) 的前缀和, LIS 的长度 \(\ell\) 显然是 \(\max_{l<r}\{s_r-s_l\}\). 注意到这里能取到最大值的 \((l,r)\) 在按 \(r\) 升序排列后, 一定满足 \(s_r\) 不增, 因此我们可以对每段极长的 \(s_r-s_l=\ell\) 求答案.
LIS 很长, 段数很少, 可以主动地向矩阵快速幂靠. 令 \(f(i,j)\) 表示上升序列长度为 \(i\) 时, 最后一个数取自第 \(j\) 段的方案数. 在两个值域上相邻的转折点之间, \(f(i,\cdot)\) 向 \(f(i+1,\cdot)\) 的转移是确定的线性变换, 矩阵快速幂即可. 复杂度 \(\mathcal O(n^4\log n)\).
5.「CF 1842H」Tenzing and Random Real Numbers
- Link & Submission.
你这 H 这么… 清新的?
令所有 \(x_i\gets x_i-0.5\), 这样 \(x_i+x_j\) 的正负性由绝对值较大者的符号决定. 按绝对值升序状压 DP 即可, 用一些位运算做转移合法性判断可以做到 \(\mathcal O(n2^n)\).
6.「UR #17」「UOJ #370」滑稽树上滑稽果
- Link & Submission.
妈的, 读错题了, 请出题人吃橘子.
显然最优构造是整出一条链. 不考虑所有数字都有的 bit, 设 \(f(S)\) 表示使得链底的滑稽度为 \(S\) 时的最小代价, 枚举子集转移即可. \(\mathcal O(V^{\log_23})\).
7.「SDOI 2019」「洛谷 P5362」连续子序列
- Link & Submission,
- 「C.性质/结论」
\(T\) 串具有非常好的归纳性质, 我们也可以尝试询问 \((S,k)\) 通过某种规则不断折半范围, 直到可以直接回答为止. 考虑一种 "任意位置上的子串都会被折半" 的构造过程:
- \(T_0=\str{0}\).
- 令 \(T_{i,j}\gets T_{i-1,j}\), \(T_{i,j+0.5}=\lnot T_{i,j}\), 得到 \(T_i\).
将 \(S\) 按两种可能的对齐方式折半就行. 记忆化后状态数是 \(\mathcal O(|S|+\log k)\) 的.
8.「CTS 2019」「洛谷 P5404」重复
- Link & Submission.
- 「A.字符串-ACAM」「C.性质/结论」
"存在" 不如 "任意", 我们来计数所有非法串 \(T\). 一个很棒的 motivation 是, 我们不从 \(T^{+\infty}\) 的左端点开始尝试和 \(S\) 匹配, 而是从 \(T^{A}TT^{+\infty}\) (\(A\) 为一充分大的常数) 中的 \(T\) 与 \(S\) 的匹配情况来比较大小关系. 假设 \(T_A\) 在 \(S\) 的 AC 自动机上匹配到结点 \(u\), 则 \(T\) 为非法串的要求就是: 从 \(u\) 开始的一系列匹配过程中没有到达可以产生 \(<S\) 的后缀, 且匹配完成后回到结点 \(u\).
这样, \(70\) 分很轻松: 我们预处理匹配到 \(S[:\ell]\) 时能否用字符 \(c\) 转移, 若能, 转移到哪个位置, 枚举 \(u_0\), \(\mathcal O(nm|\Sigma|)\) DP 一遍, 统计回到 \(u_0\) 的 DP 结果, 就能求出答案. 复杂度 \(\mathcal O(n^2m|\Sigma|)\).
可以看出, DP 过程是一个与 \(u_0\) 无关的线性变换, 但仅仅 "是一个线性变换" 已经没有办法提供优化了, 我们需要考察匹配的具体性质. 若从 \(u\) 通过字符 \(c\) 的转移没有回到 \(0\), 则所有 \(<c\) 的字符转移都必然产生 \(<S\) 的后缀. 因此, 这样的 \(c\) 至多只有一个. 仍然枚举 \(u_0\), 我们直接模拟这段没有回到 \(0\) 的转移, 计算从当前状态回到 \(0\) 然后走到 \(u_0\) 的答案 (只与剩余步数和 \(u_0\) 有关, 可以预处理). 如果可以通过 \(c\) 转移完整个 \(T\) 会到 \(u_0\), 再把答案\({}+1\) 就行. 最终复杂度 \(\mathcal O(nm|\Sigma|)\).
9.「CF 1842G」Tenzing and Random Operations
- Link & Submission.
- 「A.数学-组合计数」「C.思维」
AGC 风味好题.
有点类似 "DP and DP", 虽然 \(\prod(a_i+v+v+\cdots)\) 中的 \(v\) 很多, 但实际上被 \(\prod\) 选入贡献的只有 \(\mathcal O(n)\) 个, 我们只需要区分它们. 令 \(f(i,j)\) 表示考虑了 \(t=1\sim i\) 的贡献, 已经有 \(j\) 个不同操作带来的 \(v\) 产生过贡献, 转移:
- \(i+1\) 处由 \(a_{i+1}\) 贡献, \(f(i+1,j)\addeq f(i,j)\).
- \(i+1\) 处由已有的 \(v\) 再次贡献, 只需要选出这个 \(v\), \(f(i+1,j)\addeq jv\times f(i,j)\).
- \(i+1\) 处由新的 \(v\) 第一次贡献, 需要选处某次操作和操作到的位置, \(f(i+1,j)\addeq i(m-j)\times v\times f(i,j)\).
答案显然就是 \(\sum f(n,j)n^{-j}\) (当然在一些题里这里还需要写另一个 DP, 所以叫 DP and DP). 复杂度 \(\mathcal O(n^2)\).
Fun fact: 这 round 的主人公中文名叫做丁真.
10.「SDOI 2018」「洛谷 P4605」物理实验
- Link & Submission.
- 「A.扫描线」
先转一转把导轨转到水平方向. 不妨只考虑导轨上访的挡板, 扫描 \(x\), 维护经过该横坐标的挡板关于经过位置的纵坐标值排序的结果, 每次被照射到的挡板就是 \(y\) 最小的一个. 将区间加法贡献离线下来, 最后再扫描线一次求出区间和的最大值即可. \(\mathcal O(Tn\log n)\), 常数略大.
11.「NOI Simu.」流星雨
对于某个时刻下的询问 \(k\), 可经过的格子 \((r,c)\) 满足限制 \(r\in R_k\lor c\in C_k\), \(R_k,C_k\) 即行列编号集合. 线段树二分求一求从起点或者终点出发最近能够到达的 \(r\in R_k\) 或者 \(c\in C_k\) 就行. 注意有一种特殊情况是起点终点间所有的行 (或列) 都可用, 这样可以直接走最短距离, 不需要关心列 (或行) 的状态.
\(\mathcal O(m\log n)\), 卡常真没品.
12.「LOJ #6289」花朵
- Link & Submission.
- 「A.数学-多项式」「B.Tricks」
我真没做过?
树上问题, 不弱于菊花 (分治 FFT), 不弱于链 (分治 FFT), 所以一句话概括做法就是把菊花和链拼起来就行.
具体来说, 重剖, 用类似 DDP 的顺序计算多项式. 链顶到父亲的贡献分治 FFT 乘起来, 重链上再整个分治 FFT 算重链顶的答案. \(\mathcal O(n\log^2n)\). 也许可以用全局平衡的链剖分方式去掉一个 \(\log\).
13.「LOJ #6680」henry_y 的函数
- Link & Submission.
\(\mathcal O(n)\) 筛个 \(g(\cdot)\) 应该是基本功吧, 然后我们就飞快地得到了一个 \(\mathcal O(n\log n)\) 的做法, 实际上已经能过了.
但某校的 CPU 跑不过 LOJ 时限还比 LOJ 小啊! 我们还是整点更快的吧.
设 \(h(n)=f(n)-f(n-1)\), 则
h(n) &= \sum_{i=1}^{n}((n/i)^2-((n-1)/i)^2)g(i)\\
&= \sum_{d\mid n}((n/d)^2-(n/d-1)^2)g(d)\\
&= \sum_{d\mid n}(2d-1)g(n/d)\\
&= 2(\text{id}\star g)(n)-(I\star g)(n).
\end{aligned}
\]
多筛点儿东西就 \(\mathcal O(n)\) 了.
14.「洛谷 P7390」造树
Link & Submission.
「B.贪心」
大概感受到大家初见树上道路铺设的感觉了: 题解说得对, 看之前不会!
根据排序不等式, 我们希望小点权尽量和小点权连边, 大点权尽量和大点权连边. 可以通过 exchange argument 证明在保持合法的前提下, 贪心选择最小的匹配对最优.
不妨把所有点按照点权升序排列. 我们从左到右扫描结点, 尝试为它们找到以 \(1\) 为根时的父亲, 我们需要一直保持 \(1\) 所在连通块能够产生出边, 这样才能让树连通. 维护连通块 \([1,j]\), 枚举连通块中有出边的结点 \(i\), 单调移动指针. \(i\) 不能和 \(j+1\) 直接相连而二者都没有出度, 这个时候需要找到最近的有 \(>1\) 的出度的点 \(k\), 让 \(1\) 连续段尽量向 \(k\) 连. 三个指针扫描即可, 瓶颈是排序的 \(\mathcal O(n\log n)\).
15.「CF 1098F」Ж-function
- Link & Submission.
- 「A.字符串-SAM」「A.树论-点分治/点分树」
LCP 不是好文明, LCS 可以用 SAM 的 parent 树描述! 建出 \(S\) 的后缀树 (反串 parent 树), 不妨认为对于 \(i\in[1,n]\), 树上结点 \(i\) 恰好对应 \(S[i:]\). 此时 \([l,r]\) 的答案可以写为:
\]
相比于 \(\lca(l,i)\), \(\textit{mx}_{\lca(l,i)}\) 反而有更好的性质: 它就是 \(l\to i\) 树上路径中的最小权值, 我们借此转化掉 LCA, 把问题转化为无根树上的路径贡献. 点分治嘛, 设分治中心 \(u\), 讨论 \(l\) 和 \(i\) 的关系 (注意和 \(l\) 相关的量是可枚举的):
- 最小权 \(x\) 在 \(l\to u\) 取到:
- 对于 \(l\le i\le r-x+1\), \(i\) 对 \(\textit{ans}_{l,r}\) 贡献 \(x\).
- 对于 \(r-x+1<i\le r\), \(i\) 对 \(\textit{ans}_{l,r}\) 贡献 \(r-i+1\).
- 最小权 \(x\) 在 \((i\to u)\setminus\{u\}\) 取到:
- 对于 \(i\in[l,r]\) 且 \(x+i-1\le r\), \(i\) 对 \(\textit{ans}_{l,r}\) 贡献 \(x\).
- 对于 \(i\in[l,r]\) 且 \(x+i-1>r\), \(i\) 对 \(\textit{ans}_{l,r}\) 贡献 \(r-i+1\).
第一部分可以直接在 \((\text{id},\text{min})\) 的二元组序列上二分. 第二部分是二维偏序, 离线掉 \(i\in[l,r]\), 另一个偏序挂 BIT 即可维护. 复杂度 \(\mathcal O(n\log^2 n)\) (\(n,q\) 同阶).
刚好选到这首歌, 又看到 APJifengc 的闲话啊, 就当作把这首歌送给他叭.
究竟 为何而守候
直到帷幕落下 才明白理由
haru haru haru haru
原来温暖触手可得
即使倒灌的寒冷终将我淹没
不曾散去云层背后
如果惊蛰随梦远走
就让愿望一并汇入河流
向春雨飘融白雪的尽头
Solution Set - “如果惊蛰随梦远走”的更多相关文章
- Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...
- Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架
Enterprise Solution 是一套管理软件开发框架,在这个框架基础上开发出一套企业资源计划系统Enterprise Edition. 现将Enterprise Solution开发过程中遇 ...
- Windows 10 部署Enterprise Solution 5.5
Windows 10正式版发布以后,新操作系统带来了许多的变化.现在新购买的电脑安装的系统应该是Windows 10.与当初用户不习惯Windows 7,购买新电脑后第一个想做的事情就是重装成XP,估 ...
- Enterprise Solution 企业资源计划管理软件 C/S架构,支持64位系统,企业全面应用集成,制造业信息化
Enterprise Solution是一套完整的企业资源计划系统,功能符合众多制造业客户要求.系统以.NET Framework技术作为开发架构,完善的功能可有效地帮助企业进行运营策划,减低成本,如 ...
- Dynamics CRM 2015-超大Solution导入问题
我们在将比较大的solution导入CRM的时候,经常会遇到超时的问题,这是因为CRM的本身的优化限制导致的,那么如何解决呢? 官方已经有了解决方案了. 在浏览完两种解决方法之后,我们要知道的是: 1 ...
- WATERHAMMER: A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION
开启阅读模式 WATERHAMMER A COMPLEX PHENOMENON WITH A SIMPLE SOLUTION Waterhammer is an impact load that is ...
- Codility NumberSolitaire Solution
1.题目: A game for one player is played on a board consisting of N consecutive squares, numbered from ...
- codility flags solution
How to solve this HARD issue 1. Problem: A non-empty zero-indexed array A consisting of N integers i ...
- The Solution of UESTC 2016 Summer Training #1 Div.2 Problem C
Link http://acm.hust.edu.cn/vjudge/contest/121539#problem/C Description standard input/output After ...
- The Solution of UESTC 2016 Summer Training #1 Div.2 Problem B
Link http://acm.hust.edu.cn/vjudge/contest/121539#problem/B Description standard input/output Althou ...
随机推荐
- .NET 平台 WPF 通用权限开发框架 (ABP)
前言 对于大多数.NET后端开发者而言,ABP框架已经相当熟悉,可以轻松进行二次开发,无需重复实现用户角色管理.权限控制.组织管理和多租户等功能. 然而,ABP框架主要专注于Web应用,对于桌面端和移 ...
- Paypal绑定招商银行 —— Paypal绑定收款银行账户的注意事项
地址: https://code.newban.cn/446.html
- 摒弃传统setInterval, 自己封装一个
传统的setInterval在某种情况下会导致内存泄漏,每次调用都会占用一部分内存空间,既然threejs的更新都是基于# requestAnimationFrame的循环调用,那么我们就可以利用这个 ...
- 开源 - Ideal库 -获取特殊时间扩展方法(四)
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法. 01.获取当前日期所在月的第一个指定星期几 该方法和前面介绍的获取当前日期所在周的第一天(周一)核心思想是一样的,只是把求周一改成求周几而 ...
- VS项目无法加载js或其他文件
1.查看文件位置项目是否加载进去 2.将文件显示,再次找到该目录将文件添加到项目中 3.启动调试,
- ChatGPT:编程的 “蜜糖” 还是 “砒霜”?告别依赖,拥抱自主编程的秘籍在此!
在当今编程界,ChatGPT 就像一颗耀眼却又颇具争议的新星,它对编程有着不可忽视的影响.但这影响就像一把双刃剑,使用不当,就可能让我们在编程之路上"受伤". 一.过度依赖 Cha ...
- 服务器cli模式下的定时器
有时候需要一部分后台业务异步的处理,比如处理redis队列啊,处理mysql统计啊,数据同步啊,这种长时间任务,但是又需要每段时间去看看的,发现linux cron最小只能支持每分钟的任务 分 时 天 ...
- C#-公众号H5页面授权获取用户code、openid、unionid
一:配置信息 公众号设置: 1:设置 IP白名单(所在的服务器ip).记录公众号APPID和APPsecret; 2:设置 网页授权域名; 二:页面授权----[html中获取code] 1:页面引入 ...
- luasql使用问题记录:module 'luasql.mysql' not found
安装版本 # lua -v Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio # apisix version /usr/local/openres ...
- SpringMVC-Mybatis-Maven项目整合
上次不知道为什么,把写好的系列文章都搞成一样了.结果,五篇文章,都变成了最后一篇文章. 悲剧,好吧,只好重新写了. 这系列文章写的是SpringMVC-Mybatis-Maven项目整合.说白了,其实 ...