Live2D

Solution Set -「AGC 010~012」C~F

「AGC 010C」Cleaning

  Tag:「B.贪心」

  你不觉得我出的这道题要难一点嘛. (

  定义一个点的 "输出量" 为其需要的父亲向子树内走的路径条数. 叶子的输出量就是点权, 其他点的输出量可以直接唯一确定, 如果违背了一些条件自然就无解了.

「AGC 010D」Decrementing

  Tag:「C.性质/结论」

  如果不除 gcd, 设 s=ai, 则先手的获胜情况仅与 sn 的奇偶性有关. 另一方面, 如果 2gcd, 这个除法也并不会改变 s 的奇偶性, 也就是不影响答案. 因此, 我们需要关注的是 gcd 中因子 2 的情况.

  初步想一想策略: 若当前 sn 下先手必胜, 那么先手疯狂操作偶数, 让 gcd 永远不是 2 的倍数, 后手就寄了; 如果当前 sn 下后手必胜, 并且先手无法一步让 2gcd, 先手同理也寄了; 等等, 先手如果可以一步改变 gcd 的奇偶性, 那么 a 中肯定有且仅有一个奇数且其 >1. 先手只能操作它, 然后直接递归判断就好. 复杂度 O(nloga), 再算上暴力求 gcd 的话就是 O(nlog2a).

「AGC 010E」Rearranging

  Tag:「B.贪心」

  初步解读题意: Aoki 的操作会让序列成为满足从左到右拓扑关系下字典序最大的一个, 而 Takahashi 则要初始化这个序列. 当然啦, 我们肯定是直接构造结果序列, 相当于去规定具体的拓扑关系, 然后在这个拓扑关系下构造最大字典序序列.

  先考虑后者: 直接将拓扑排序过程中的队列换成关于权值的大根堆即可.

  前面这个 ... 根据 au⊥̸av 可以生成一系列无向边, 我们的工作是将它们定向, 形成一个 DAG. 其实也是一个贪心: 每次从未遍历过的点权最小的点出发, 按点权升序枚举邻接点递归, 构造生成树. 正确性容易感性理解.

「AGC 010F」Tree Game ^

  20221003 C 题. 可算找到这傻瓜题的出处了. (

「AGC 011C」Squared Graph *

  Tags:「C.性质/结论」「C.思维」

  兔, 根本不会分讨, 根本没有思维.

  考虑 (x1,y1)(x2,y2) 连通性, 我们需要尝试找到一条从 (x1,y1) 走到 (x2,y2) 的路径. 可见, 由于 ((a,b),(c,d))E 等价于 (a,c),(b,d)E, 所以从 (a,b) 走到 (c,d) 相当于让 a 沿着 (a,c) 挪到 c, 同时让 b 沿着 (b,d) 走到 d. 因此, (x1,y1)(x2,y2) 连通的条件是: 原图上存在一对等长的, 分别连接 x1,x2y1,y2 的路径. 稍作简化, 即存在两条长度奇偶性相同的简单路径.

  路径奇偶性的话 ... 肯定需要讨论连通块是否是二分子图嘛. 设 a,b,c 分别表示非二分图连通块数量, 二分图连通块数量 (不含单点), 单点数量. 讨论三种连通块内部和之间的连通情况即可计算答案. 复杂度 O(n).

「AGC 011D」Half Reflector *

  Tags:「C.性质/结论」「C.思维」

  看来这场 AGC 要爆零了 qwq.

  不妨讨论小球正在某两个 reflector 中间运动的情况, 用 l/r 标记运动方向那么

  • ArAAlBBrBBAr.
  • ArBAAr.

  发现一件事情: 若一个向右滚动的小球的左侧有 A, 那么这个 A 会保持在球的左侧不断地向右移动. 因此, 在这种情况下小球一定会从最右侧离开. 换句话说:

  • 只要第一个 reflector 不是 A, 小球一定会从右侧离开.

  当然, 第一个 reflector 就是 A 的情况太平凡了, 我们只去研究后者. 根据先前的结论, 小球左侧第一个 A 再左边的 reflector 的状态一定不会再因当前小球改变了. 况且, 在小球第一次出现在两个 reflector 中间时, 左侧的 reflector 一定是 A 状态. 所以我们就需要考虑上面列举的两种情况下, 左侧 reflector 的变化情况. 可见, 当右侧为 A 时, 左侧变为 B; 当右侧为 B 时, 左侧变为 A. 顺便结合边界情况的单独讨论, 我们可以得到一个简洁的结论:

  • 当第一个 reflector 不为 A 时, reflectors 的整体变化情况是: 全部取反, 然后循环左移一位.

  到此, 我们已经可以 O(k) 地模拟整个变换过程了. 接下来的工作无非是找到变换的周期性特点. 注意在一次循环位移后, 最后一个 reflector 一定是 A, 则下一次的倒数第二个一定是 B, 再下一次倒数第三个又是 A, ... ,每两个小球中至少有一个会引起位移, 那么最多 2n 个小球就能让序列恒定在 x(AB)k 的状态, 直接去求最终状态就好啦. 复杂度 O(n).

「AGC 011E」Increasing Numbers

  Tag:「B.Tricks」

  算是经典 trick 吧, 一个 increasing number x 可以表示成

x=i=1910xi19.

Nk 个 increasing numbers {xk} 表示, 那么

N=i=1kj=1910xi,j199N+9k=i=1kj=1910xi,j.

由于 xi,j 很随意, 所以只需要 9N+9k 在十进制下的位和不超过 9k, 我们就能构造出合法解. 又显然 kO(logN) 的, 所以直接从 k=1 开始向上枚举 k, 均摊 O(1) 地维护 9N+9k 的值及其位和即可. 复杂度 O(logN).

「AGC 011F」Train Service Planning *

  Tags:「A.数学-数学推导」「A.数据结构-线段树」

  一大难点是抽象出这个数学情景.

  令 pi 表示 L 车 (0n) 在车站 i 停留的时间, qi 表示 R 车 (n0) 在车站 i 停留的时间. 同时, 记 Sa(t)=i=1tai, Sp(t)=i=0t1pi, Sq(t)=i=0t1qi. 那么, L 车行驶在区间 (i1,i) 的时间区间为

(Sa(i1)+Sp(i),Sa(i)+Sp(i))+tk.

同理, R 车行驶在区间 (i1,i) 的时间区间为

(Sa(i)Sq(i),Sa(i1)Sq(i))+tk.

  对于 bi=1 的区间, 我们要求

((Sa(i1)+Sp(i),Sa(i)+Sp(i))+t1k)((Sa(i)Sq(i),Sa(i1)Sq(i))+t2k)=.

注意两个区间是等长的, 所以有

{Sa(i1)+Sp(i)(Sa(i)Sq(i),Sa(i1)Sq(i))+tk,Sa(i)+Sp(i)(Sa(i)Sq(i),Sa(i1)Sq(i))+tk.

  先整理一下, 令 xi=Sp(i)+Sq(i), 则上式变为

{Sa(i1)+xi(Sa(i),Sa(i1))+tk,Sa(i)+xi(Sa(i),Sa(i1))+tk.

其中, {x0..n} 是单调不降的. 也就是说, 从 xixi+1, 我们需要给出一个增量 di0, 使得 xi+1modk 不落在某些区间内. 显然, 为了最小化 xn, 若施加的 di0, 则 xi+1 必然处于某个禁止区间的端点上. 用数据结构维护这一贪心过程即可. 复杂度 O(nlogn).

「AGC 012C」Tautonym Puzzle *

  Tag:「A.构造」


  一看就是倍增构造, 不过如何找到一个能够轻松 ×2/+1 的东西捏?

  看了一眼题解, 啧, LIS 嘛. 在后面摆一个 [1,2,,100], 那么合法子序列总数就是前面部分的非空 LIS 数量了.

「AGC 012D」Colorful Balls

  Tag:「A.并查集」


  欸不是, 真不觉得这题比上面那个构造简单嘛 ...

  有一个简单的暴力: 枚举 (n2) 个交换关系, 并查集连边. 每个连通块对答案的贡献是一个多重组合数的形式, 可以直接算. 我们只需要简化一下建边的方式.

  对于同色交换, 可以简并为和同色中最轻的球的连续交换; 对于异色交换: 显然也应该两种颜色的最轻球先交换. 这里有一个 corner: 有可能某个球无法进行同色交换, 但可以通过最轻的异色球转移到同色最轻球位置, 我们直接认为它可以进行同色交换就好. 复杂度 O(nα(n)).

「AGC 012E」Camel and Oases

  Tags:「A.DP-状压/插头 DP」「B.倍增」


  我们一共有 c=log2v+1 次跳跃机会, 每次跳跃后必然可以覆盖掉相邻坐标差不超过 v 的极长段. 换句话说, 我们需要选择 c 个分别满足相邻坐标差不超过 v,v/2,v/4,,0 的连续段覆盖整个 [1,n], 并且第一个连续段的位置是被钦定的.

  设第一个极长段覆盖了 [l,r], 那么我们需要把剩下的可用极长段分为两个集合 S,T, 用 S 内的极长段尝试覆盖 [1,l1], 用 T 内的极长段尝试覆盖 [r+1,n]. 注意这其实和 l,r 的取值没关系, 我们直接 DP 求出 f(S)g(T), 分别表示用 S 内的极长段从左侧开始能覆盖的最大右端点; 用 T 内的极长段从右侧开始能覆盖的最小左端点. 预处理一下倍增可以 O(vlogvlogn) 求出来.

  然后呢? 如果暴力枚举 S 去检查 T 还是 O(nv). 不过, 如果从左到右算答案, 可以覆盖到 [1,l1]S 将不断减少, 可以覆盖到 [r+1,n]T 将不断增多. 所以我们暴力维护有哪些 S,T 满足当前条件, 统计 ST=U 的数量. 当这一数量非零则有解. 最终复杂度 O(vlogvlogn).

「AGC 012F」Prefix Median *

  Tags:「A.DP-计数 DP」「C.思维」


  显然 bn 为全局中位数, 这提示我们从后往前考虑 b 的构造可能会得到更强的限制. 从后往前, 每次可以删掉 a 的两个元素, 此时 b 在中出现位置的位移不超过 1. 更细致的, 将 a 排序后, b 合法的条件为:

  • aibia2ni;
  • i<j, bj<bi<bj+1bj+1<bi<bj.

通过构造方案, 可知这个条件是充要的. 接下来对它 DP 即可. 令 f(i,l,r) 表示从后往前考虑到 bi, 对于当前这个 b, 左边可以直接移动到的位置有 l 个, 右边有 r 个. 当边界处出现相等数时视为同一个, 枚举下一个 b 移动到的位置就能完成转移. 复杂度 O(n4).

posted @   Rainybunny  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2020-10-25 Solution -「ARC 063D」「AT 2149」Snuke's Coloring 2
2020-10-25 Solution -「LOCAL」模板
点击右上角即可分享
微信分享提示