Solution Set -「AGC 007~009」C~F
(震惊, 009 莫得 F.)
(啊我发现自己错字 typo 好多 qwq.)
「AGC 007C」Pushing Balls
Tag:「C.性质/结论」
这个期望直观上太均匀了!
记当前期望局面为 \(\lang n,d,x\rang\), 通过模拟单次选球, 将剩下的球坑重编号, 可以发现后继期望局面为 \(\lang n-1,(2d+5x)/(2n),x+2x/n\rang\), 当前操作的期望距离为 \(d+(2n-1)/2\cdot x\). \(\mathcal O(n)\) 递推一下就做完了.
「AGC 007D」Shik and Game
Tag:「水题无 tag」
??? 你放一道伞兵得令人发指的 DP 题搁这儿做慈善呢还是当难度刺客呢 ???
\(f(i)\) 表示从 \(x_i\) 出发操作完后缀并走到出口的最小用时, \(f(n+1)=0\). 转移是
\]
当 \(\max\) 取前面的时候, 贪心地想, 必然只有 \(j\) 取临界位置时可能最优 (如果可以再往后送一颗糖果再往回, 又不浪费时间, 何乐而不为). 当 \(\max\) 取后面的时候, 显然可以直接维护最优转移. 所以 \(\mathcal O(n)\) 结束了.
「AGC 007E」Shik and Travel ^
Tags:「A.DP-树上 DP」「C.性质/结论」
二分答案 \(L\), 暴力 DP: 令 \(f(u,a,b)\) 表示 \(u\) 子树内, 从到 \(u\) 距离为 \(a\) 的叶子出发, 到距离为 \(b\) 的叶子结束, 路径长度不超过 \(L\), 是否可以遍历完子树. 那么转移为:
\]
注意到注意到若 \(f(u,a_1,b_1)\) 为真, 那么 \(f(u,a_2,b_2)~(a_1\le a_2,b_1\le b_2)\) 都没有用. 暴力存储剩下的所有状态, 可以证明状态数不超过 \(\mathcal O(n\log n)\) (当时绝对证过, 这里跳了), 转移可以 two-pointers. 于是最终复杂度 \(\mathcal O(n\log n\log V)\).
「AGC 007F」Shik and Copying String *
Tag:「C.性质/结论」
字符的配对方式是显然的: 找到前缀最近的可用字符配对. 关键是在于求出最少步数. 盗张图:

关注所有 L 形拐弯, 这些拐点的覆盖关系限定了一些字符向后覆盖的先后顺序. 我们从底层的 \(T\) 出发, 从后往前模拟这个过程. 沿着 \(y=x+b\) 的方向将拐点分类, 每类拐点只需要记录最上方的位置. 此后, 如果存在一个拐点无法左下延伸到当前考虑的 \(T_i\), 那么当前 \(T_i\) 的覆盖与这个拐点就没有以来关系, 可以将拐点删掉. 队列大小的最大值就是答案. 复杂度 \(\mathcal O(n)\).
「AGC 008C」Tetromino Tiling
Tag:「水题无 tag」
由于没有办法填平突出的一格, 第 \(3,6,7\) 种显然没用. 记剩下四种的数量分别为 \(a,b,c,d\), 除了一个特殊情况 \(4+1+5\) 的组合, 其他的组合形式都是同种内部组成 \(2\times 2k\). 注意特殊组合最多出现一次 (否则可以将两个一起拆开), 那么算出出现和不出现两种情况的答案求一个最大值即可.
那什么, 兔在这题的 attempt 次数是前 \(7\) 场到现在以来的最大值. (悲
「AGC 008D」K-th K
Tag:「水题无 tag」
从左往右贪心放需要放的, 然后从右往左贪心放快要不能放的. \(\mathcal O(n)\).
「AGC 008E」Next or Nextnext *
Tags:「A.DP-计数 DP」「B.模型转化」
怎么说呢, 太会容斥导致忽略了很多更为直接的思考途径.
设生成序列 \(a\) 的是某个排列 \(p\). 则 \(\{\lang i,p_i\rang\}\) 构成若干环. 现在允许将一些 \(\lang i,p_i\rang\) 替换为 \(\lang i,p_{p_i}\rang\) 来生成 \(\lang i,a_i\rang\). 每个 \(p\) 上的环显然是独立的, 我们分别讨论.
第一种情况, 环上所有边全部向后跳一步. 这时 \(a\) 的形状由 \(p\) 的环长奇偶性决定:


可见, 在奇环上, 这种变换不会改变环的结构; 偶环上则会把大环等分为两个小环.
第二种情况, 环上部分边向后跳, 部分边保留. 例如:

得到的 \(a\) 一定是内向基环树.
现在我们已知 \(a\), 反过来讨论 \(p\). 对于 \(a\) 中的简单环, 它必然由第一种情况生成. 大小相同的环可以合并出偶环, 所以将这些环按照大小分类, 每类做一个 DP 即可求出方案.
对于 \(a\) 中的基环树, 他必然有第二种情况生成. 我们需要做的是将环外挂的链给塞回环中.首先, 外挂链塞回后不能重叠 (上图中, \(2'\) 只能塞到 \(1'\rightarrow 3'\) 中, \(5'\) 只能塞到 \(3'\rightarrow 4'\rightarrow 6'\rightarrow 1'\) 中). 发现其实最多两种塞法: 全部跳这塞, 或者第一个不跳, 其他的跳这塞. 前者要求可塞范围 \(>\) 链长, 后者要求 \(\ge\) 链长. \(\mathcal O(n)\) 在环上扫一扫求能求出答案. 最终复杂度 \(\mathcal O(n)\).
「AGC 008F」Black Radius *
Tags:「C.性质/结论」「C.思维」
感觉这种需要磨结论的题总是磨到一般就放弃了 qwq.
先考虑部分分: 所有结点都可以是圆心的情况. 对于一个圆, 它可能是树上多个结点不同半径的临域. 设点集 \(D(u,r)\) 表示 \(u\) 的半径为 \(r\) 的树上临域, 我们的第一个任务就是找到不重不漏地计数圆的规则.
首先排除一个极其特殊的圆: \(V\) (完整点集). 设 \(R_u\) 表示 \(u\) 到其他点的最远距离, 则我们先对 \(u\) 限定 \(r<R_u\). 到此, 可以直观地感受到, 如果两个临域 \(D_1,D_2\) 对应了同一个圆, 则其中一个圆 "卡在了边界", 而另一个圆 "更靠中间", 与之对应的一个观察是, 若 \(D(u,r_1)=D(v,r_2)\neq V\), 则 \(r_1\neq r_2\), 证明是显然的.
因此, 对于圆 \(C\), 我们可以尝试在 \(D(u,r)=C\) 中使得 \(r\) 最小的临域 \(D(u_0,r_0)\) 处对 \(C\) 计数. 而检查 \(D(u_0,r_0)\) 可计数的条件便是: 不存在 \(u_0\) 的临接点 \(v\), 使得 \(D(u_0,r_0)=D(v,r_0-1)\). 以 \(u_0\) 为树根, 可以发现, 为了使 \(D(u_0,r_0)=D(v,r_0-1)\), \(v\) 应当取 \(u\) 最深邻接子树的树根. 那么相反的, 我们要求这个 \(v\) 仍不合法, 相当于要求 \(r_0\le t+1\), 其中 \(t\) 为 \(u_0\) 的次深邻接子树深度.
这就是部分分的情况. 现在推进到完整题目, 我们的计数规则需要变为: 在 \(D(u_0,r_0)\) 处, 若存在某个可作圆心的 \(v\), 使得 \(D(v,r)=D(u_0,r_0)\), 则计数 \(D(u_0,r_0)\) (注意并不要求 \(u_0\) 可作圆心). 类似于已有的讨论, 当圆心从 \(u\) 移动向 \(v\) 时存在 \(r\), 就势必满足 \(u_0\) 为根时, \(D(u_0,r_0)\) 覆盖了 \(v\) 这个方向的 \(u_0\) 的邻接子树的全部结点. 为了使这一条件宽松, \(v\) 就会在深度最浅的邻接子树里取 (当然, 前提是这棵子树里有圆心).
最后, 我们通过换根 DP 求出 \(D(u_0,r_0)\) 中 \(r_0\) 的上界和下界, 这一区间内的 \(r_0\) 都可被计数, 而后别忘记加上特殊的圆 \(V\). 这样就 \(\mathcal O(n)\) 做完啦.
「AGC 009C」Division into Two
Tag:「水题无 tag」
\(f_{A/B}(i,j)\) 表示考虑了前 \(i\) 个数, 第 \(i\) 个属于 \(A/B\), 属于另一个集合的最后一个是 \(j\). 滚个前缀和可以 \(\mathcal O(1)\) 整体转移 \(j\), 复杂度 \(\mathcal O(n)\).
「AGC 009D」Uninity *
Tags:「B.模型转化」「B.贪心」
一开始只想到点分树方面的东西, 然后就尝试开始讨论重心等等贪心方法, 结果忽略了转化求解目标的重要性 qwq.
对于这种递归式的划分, 一个常见的思路是将划分完成后的划分信息全部表现在原结构上. 在这里, 我们为 \(k-\)Uninity 划分的中心点编号上 \(k\), 可以发现, 编号合法的充要条件是: 任意两个标号为 \(k\) 的点的路径上存在一个标号为 \(k+1\) 的点.
当然啦, 点分树这个思路还是有点作用, 它提示我们, 需要使用的最大标号是 \(\log n\) 级别的.
所以 ... 就直接子树内状压 DP 贪心嘛. 完成子树的构造后, 得到一个集合 \(S\), 表示子树内能够经过不大于自己标号的点走到子树根以上的标号集合, 在合并孩子时考虑当前子树根的最小可能标号 \(x\). 则 \(x\) 应当满足:
- 对于所有孩子的 \(S\), \(x\notin S\);
- 若两个孩子的 \(S_1\cap S_2\neq\varnothing\), 则 \(x>\max(S_1\cap S_2)\).
灵活位运算维护这一过程可以做到 \(\mathcal O(n\log n/\omega)\), 当然这里也就是 \(\mathcal O(n)\).
「AGC 009E」Eternal Average ^
Tags:「A.DP-计数 DP」「B.模型转化」
显然先整棵 \(k\) 叉树, 设 \(1\) 叶子的深度集合为 \(\{p_m\}\), \(0\) 叶子的深度集合为 \(\{q_n\}\), 则根的值为 \(\sum_ik^{-p_i}\). 不过, 当务之急是找到根据 \(\{p_m\},\{q_n\}\) 反过来判定树是否存在的方法
唔 ... 有一个必要条件是 \(1=\sum_ik^{-p_i}+\sum_ik^{-q_i}\). 进一步思考发现, 我们的确可以通过这个必要条件构造出树: 将深度最大的结点凑在一起, 因为和为 \(1\), 所以必然存在 \(k\) 的倍数个, 将它们按任意顺序合并, 之后进行归纳构造即可.
现在, 问题转化成, 求有理数 \(x\) 的个数, 满足存在一组 \(\{p_m\},\{q_n\}\), 使得 \(x=\sum_ik^{-p_i}\) 且 \(1-x=\sum_ik^{-q_i}\). 尝试对 \(x=0.x_1x_2x_3\dots x_l\) 进行 DP. 考虑到原本的 \(\sum_ik^{-p_i}\) 可能有进位情况, 所以 \(\sum_ix_i\equiv m\pmod{k-1}\), 另一方面, \(y=1-x=0.y_1y_2y_3\dots y_l\), 自然有 \(\sum_iy_i=l(k-1)+1-\sum_ix_i\equiv n\pmod{k-1}\). 令 \(f(i,j)\) 表示考虑了 \(0.x_1x_2\dots x_i\), \(\sum_kx_k=j\) 时所有可能的 \(x\), 顺便限制小数点最后以为 \(\neq0\), \(\mathcal O((n+m)\min\{n,m\})\) 即可完成转移.
Solution Set -「AGC 007~009」C~F的更多相关文章
- Note -「圆方树」学习笔记
目录 圆方树的定义 圆方树的构造 实现 细节 圆方树的运用 「BZOJ 3331」压力 「洛谷 P4320」道路相遇 「APIO 2018」「洛谷 P4630」铁人两项 「CF 487E」Touris ...
- Diary / Solution Set -「WC 2022」线上冬眠做噩梦
大概只有比较有意思又不过分超出能力范围的题叭. 可是兔子的"能力范围" \(=\varnothing\) qwq. 「CF 1267G」Game Relics 任意一个 ...
- Note/Solution -「洛谷 P5158」「模板」多项式快速插值
\(\mathcal{Description}\) Link. 给定 \(n\) 个点 \((x_i,y_i)\),求一个不超过 \(n-1\) 次的多项式 \(f(x)\),使得 \(f(x ...
- Solution -「洛谷 P6021」洪水
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的带点权树,删除 \(u\) 点的代价是该点点权 \(a_u\).\(m\) 次操作: 修改单点点权. ...
- Solution -「APIO 2016」「洛谷 P3643」划艇
\(\mathcal{Description}\) Link & 双倍经验. 给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...
- LOJ6003 - 「网络流 24 题」魔术球
原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...
- LOJ6002 - 「网络流 24 题」最小路径覆盖
原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio&g ...
- LOJ6001 - 「网络流 24 题」太空飞行计划
原题链接 Description 有个实验和个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬仪器花费),并输出一组方案. Solution 实验向所需仪器连边,实验的点 ...
- 「NowCoder Contest 295」H. Playing games
还是见的题太少了 「NowCoder Contest 295」H. Playing games 题意:选出尽量多的数使得异或和为$ 0$ $ Solution:$ 问题等价于选出尽量少的数使得异或和为 ...
- Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流)
Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流) Description 问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同 ...
随机推荐
- 聊聊jvm的内存结构, 以及各种结构的作用
什么是JVM 定义:Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境) 内存结构 JVM 内存布局规定了 Java 在运行过程中内存申请.分配.管理的策 ...
- Next.js 零基础开发入门教程2 构建基础脚手架 2024最新更新中|曲速引擎 Warp Drive
开发目标 我们将构建一个简化版本的财务仪表板,其内容包括:公共主页.登录页面.受身份验证保护的仪表板页面.用户可以添加.编辑和删除发票 这篇文章先创建一个简单的nextjs脚手架页面 安装pnpm包管 ...
- github加速 DevSidecar 1.8.8
DevSidecar 1.8.8 更多配置请参考:github开源
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流
在我们第一次学Servlet编程,学java web的时候,还没有那么多框架.我们开发一个简单的功能要做的事情很简单,就是继承HttpServlet,根据需要重写一下doGet,doPost方法,跳转 ...
- .NET9 - Swagger平替Scalar详解(四)
书接上回,上一章介绍了Swagger代替品Scalar,在使用中遇到不少问题,今天单独分享一下之前Swagger中常用的功能如何在Scalar中使用. 下面我们将围绕文档版本说明.接口分类.接口描述. ...
- Codeforces Round 878 (Div3)
B. Binary Cafe \(1 \leq n,k \leq 10^9\) 题解:思维 考虑两种情况 第一种:钱足够多,每种咖啡都可以买的情况下,答案为\(2^k\) 第二种:钱不够多,因为任一面 ...
- idea springboot 微服务批量启动
概要 在使用IDEA开发微服务的时候,微服务比较多,启动起来比较麻烦,下面介绍一下使用批量启动微服务的方法. 方法 编辑当前项目根目录下的 .idea\workspace.xml 文件. 找到 < ...
- sql注入-数据库表基本操作
一.数据库 linux下登录: mysql -u root -p 查看数据库: show databases; 可以在phpmyadmin面板点击SQL进行操作 1. 增加/创建 创建xxx数据库,并 ...
- IO介绍-上
IO IO系统管理的主要对象是IO设备和相应的设备控制器.其主要任务是,完成用户提出的IO请求,提高IO效率,以及提高设备的利用率.并能为更高层的进程方比那使用这些设备提供手段. IO系统的基本功能 ...
- Jetpack Compose学习(15)——Pager组件的使用(对标ViewPager)
原文地址: Jetpack Compose学习(15)--Pager组件的使用(对标ViewPager)-Stars-One的杂货小窝 从名字可以看出,Pager这个就是ViewPager的替代产物 ...