首页 > 其他分享 >Solution Set -「AGC 001~003」C~F

Solution Set -「AGC 001~003」C~F

时间:2022-09-03 15:11:55浏览次数:59  
标签:... 连通 Set 询问 AGC 003 001 序列 mathcal

目录

「AGC 001C」Shorten Diameter

  Tag: 「水题无 tag」

  首先可以转化成求直径 \(\le k\) 的最大连通块, 接着树上 DP, 令 \(f(u,d)\) 表示以 \(u\) 为根, 到 \(u\) 最远的点为 \(d\), 直径不超过 \(k\) 的最大连通块大小. 滚前缀 \(\max\) 优化至 \(\mathcal O(nk)\).

「AGC 001D」Arrays and Palindrome *

  Tags:「A.构造」「C.性质/结论」

  从中文翻译 (一看就是机翻) 得到一个题意, 从英文得到一个题意, 思考无果看题解得到一个题意 ... 哪个是对的啊喂!

  考虑回文带来的相等关系, 我们的最终目标是构造 \(a,b\) 使得相等关系将 \(n\) 个字符连通. 首先不难发现, 不考虑自环, 一个序列最多提供 \(n/2\) 条边, 而我们需要至少 \(n-1\) 条边. 讨论 \(n\) 的奇偶性可知, \(a,b\) 中共有最多两个奇数. 这一点将成为我们的突破口.

  接下来, 如何构造呢? 考虑两种特殊情形: \((a,b)=(\{1,2k\},\{2k,1\})\) 以及 \((\{1,2k+1\},\{2k+1,1\})\). 发现对于前者, 去掉用于错位的 \(1\) 后, 相同形式的 \((a,b)\) 是可以拼接的; 对于后者直接错位则会将元素分为两个连通块.

  因此可以猜测, 偶数可以错位, 奇数不能错位. 那些地方不能错位? 边界. 于是, 将 \(a\) 中的奇数 (最多两个) 放两边, 然后前端 \(-1\) 后端 \(+1\), 使得中间错位全部连通, 前后正好也是连通的, 就结束了.

  嗯 ... 最后注意一下 \(m=1\) 和 \(a=0\) 的情况就行. 还有啊, std::swap(x, y), xy 同址的时候好像是 UB, 这是因为 C++11 的实现采用类似 t = std::move(x), ... 的形式, std::move 转 xvalue 后, 原址的值是未定义的.

「AGC 001E」BBQ Hard *

  Tags:「B.模型转化」「B.Tricks」

  好题啊.

  至于很小, 一个比较自然的思路是对 \((a_i+a_j,b_i+b_j)\) 计数, 思考无果, 转而考虑结合组合数的性质求解. 正好, \(\binom{a+b}{a}\) 有一个挺好的组合意义: 从 \((0,0)\) 走到 \((a,b)\) 的方案数. 原式所求相当于从 \((0,0)\) 出发, 到所有 \((a_i,b_i)+(a_j,b_j)\) 的方案数之和.

  向量 \((a_i,b_i)+(a_j,b_j)\) 由 \((i,j)\) 刻画, 它成为了枚举的瓶颈. 转念一想, \((0,0)\) 就摆在这里岂不太便宜了? 我们移动起点, 将方案数变为: 从 \((-a_i,-b_i)\) 出发, 到 \((a_j,b_j)\) 的方案数之和. 惊讶地发现, 已经可以 \(\mathcal O(V^2)\) DP 了, 而后仅需去掉一些冗余情况.

  或许算得上是一种广义平衡思想: 让各对象头上的枚举量级尽量均衡.

「AGC 001F」Wild Swap ^

  Tags:「A.数据结构-可持久化线段树」「B.优化建图」

  当时应该是切掉的, 再糊一遍叭.

  将排列对应的置换取逆显然是方便的转化, 此后我们希望从左到右依次最小化逆置换当前位置的值. 对于一个值 \(x\), 它会将后缀 \((x-k,x+k)\) 内的数卡住, 将这个关系体现到线段树上, 直接大力跑拓扑排序即可. 复杂度 \(\mathcal O(n\log n)\).

「AGC 002C」Knot Puzzle

  Tag:「水题无 tag」

  谢谢老板大气, 黄色的 AGC-C 让本兔直呼舒适.

  如果有解, 必然存在一个 \(a_i+a_{i+1}\ge L\), 让每次剪掉的绳结都和 \(i\) 连通, 最后剪 \(i\) 即可. \(\mathcal O(n)\).

「AGC 002D」Stamp Rally ^

  Tags:「A.分治-整体二分」「A.并查集」

  读错题啦 (锤桌)! 你看 tags 难道还不会做吗?

「AGC 002E」Candy Piles ^

  Tag:「C.性质/结论」

  过于经典的博弈题了, 糊都懒得糊.

「AGC 002F」Leftmost Ball

  Tag:「A.DP-计数 DP」

  这题谷讨论区有国粹, 大家快去看呐!

  自然是直接构造最后带白球的球球序列啦, 一个序列合法当且仅当任意前缀的白球数量不小于其他出现颜色的种类数. 直接来试试? 令 \(f(i,j)\) 表示放了 \(i\) 个白球, \(j\) 种其他颜色的球的方案数. 注意这里思路的细节, 我们还并不清楚 "第几个" 重不重要, 所以不要一下就加进状态迷惑自己.

  但是这个状态不太具体, 我们需要严格地规定 \(f(i,j)\) 计数了处于何种状态的序列. 为了避免算重, 我们设计这样一个 "复制" 已知的完整带白球序列的方式: 从左到右扫描, 若为白球, 放到对应位置; 否则, 将这种颜色的所有球放到对应位置. 可见, 这种复制方式 "扫描到了哪里" 的信息只需要通过 \(i,j\) 确定, 而且通过唯一的复制顺序避免了重复. 因而, 规定 \(f(i,j)\) 表示在复制过程中, 已经放置了 \(i\) 个白球, \(j\) 种颜色的球的方案数. 转移只需要讨论当前复制位置是白球还是新颜色即可 (旧颜色什么都不会发生). 具体转移如下:

\[f(i,j)=f(i-1,j)+(n-j+1)\binom{n-i-(j-1)(k-1)-1}{k-2}f(i,j-1). \]

  复杂度 \(\mathcal O(nk)\).

  PS: 好像这种边做题边写题解的产物会显得有点啰嗦和跳跃. 我确实可以用一个超长的定语从句加一个式子瞬间写完题解, 但 motivation 是更重要的东西吧.

「AGC 003C」BBuBBBlesort!

  Tag:「水题无 tag」

  冒泡引起生理不 ... 好的答案是奇数下标上偶数排名的数量, 瓶颈是排序.

「AGC 003D」Anticube ^

  Tag:「水题无 tag」

  这 ... 大力分解素因素, 两个冲突类里选大的一类不久好了? 此外需要讨论本身就是完全立方数等情况. 而且我以前的代码好像很狰狞.

「AGC 003E」Sequential operations on Sequence

  Tags:「B.Tricks」「C.性质/结论」

  为什么 "operations" 的 "O" 不大写?

  (后文令 \(m\) 为询问次数.) 思考过程中, 发现截断一个序列真的很困难 ... 但是, 反正被截掉的部分没有用, 我们一开始就不需要生成它们! 所以可以令 \(q_0=n\), 后缀取 \(\min\) 后去重, 得到一个 "规范询问". 注意此时 \(n\) 没什么用了, 序列一开始的长度就是 \(q_0\).

  下一个难点自然是循环. 先从 "描述序列" 的角度入手, 一个序列 \(S\) 可以用 \(S=S_c^tS_r\) 来表达, 不过感觉复杂度完全没有保障. 此后又发现只有完整的 \(1..q_0\) 可能连续多次完整地循环, 但这个性质并没有什么用, 怎么办呢 ...

  那么, 从询问开始向初始序列递归呢? 我们知道一个询问最终一定能拆解成 "对 \(S[:1]\) 询问 \(c_1\) 次, 对 \(S[:2]\) 询问 \(c_2\) 次, ..., 对 \(S[:q]\) 询问 \(c_q\) 次". 初始询问可以记作 \((q_m,1)\), 表示对 \(S[:q_m]\) 询问一次, 我们只需要把它不断拆分就可以得到最终拆解.

  先来看看效果, \((q_m,1)\rightarrow (q_{m-1},q_m/q_{m-1})+(q_m\bmod q_{m-1},1)\), 等等, 我们对这个性质是敏感的: \(q_m\bmod q_{m-1}\le q_m/2\), 也就是说后一项最多出现 \(\log\) 个! 前一项我们可以直接记在 \(q_{m-1}\) 的头上, 等到所有 \(>q_{m-1}\) 的询问全部被拆解后, 在将这个 \((q_{m-1},\star)\) 统一释放一次, 一共就只会涉及到 \(\mathcal O(m\log q)\) 种询问!

  结束啦, 用堆之类的暴力模拟可以做到 \(\mathcal O(m\log q\log m)\).

「AGC 003F」Fraction of Fractal *

  Tags:「B.向量/矩阵优化」「C.性质/结论」「C.思维」

  氢 氢 敲 击 沉 睡 的 心 灵.

  你得先记住给出网格图的黑格是四连通的, 然后先粗略讨论一下连通性:

  若横向纵向都没法连通, 答案自然是 \(c^{k-1}\), 其中 \(c\) 为原图黑格数量; 若横向纵向都连通, 答案自然是 \(1\).

  难就难在只有横向或纵向连通的情况, 以下不妨以横向连通为例. 通过一些简单的容斥计数, 可以知道答案为 \(k-1\) 级分形中的黑格数量减去其中左右相邻的黑格对数. 好吧, 我会前者, 完成一半!

  假设 \(k-1\) 级图有 \(a\) 个相邻对, 那么 \(k\) 级图的相邻对就是 \(ac\) 加上 \(a\times\) 一对 \(k-1\) 级图边界出新增的相邻对; 新增相邻对能求吗? 也能递推昂! 设这个为 \(b\), 那么存在递推关系:

\[\begin{bmatrix}c_k&a_k\\&b_k\end{bmatrix}=\begin{bmatrix}c_1&a_1\\&b_1\end{bmatrix}^k. \]

矩阵快速幂一下就 \(\mathcal O(nm+\log k)\) 了.

  没有思路总得做点什么, 比如大力分讨 qwq.

标签:...,连通,Set,询问,AGC,003,001,序列,mathcal
From: https://www.cnblogs.com/rainybunny/p/16652631.html

相关文章

  • 工具学习:IDEA的Setting通用设置总结
    工具学习:IDEA的Setting通用设置总结IDEA的官网地址:https://www.jetbrains.com/idea/1.关闭IntellijIDEA自动更新目录:setting--》Appearance&Behavior–》SystemSetti......
  • vue3——初识setup
    1.理解:Vue3中一个新的配置项,值为一个函数。2.setup是所有CompositionAPI(组合API)表演的舞台3.组件中所用到的:数据、方法等等,均要配置在setup中。 4.setup函数的两种......
  • 1003:对齐输出
    时间限制:1000ms      内存限制:66536KB提交数:238575   通过数:77457【题目描述】读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们,按照格......
  • [Node.js] Setup a Node.js CLI
    CreatingaCLIinNode.jsjusttakesaextrasteportwobecausetheyarereallyjustanordinaryNode.jsappwrappedbehindabincommand.Forthisexercise,......
  • P1042 [NOIP2003 普及组] 乒乓球
    题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 1111 分制改革引起了很大的争议,有一部分球员因为无法适应新......
  • NC16886 [NOI2001]炮兵阵地
    题目链接题目题目描述司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H"表示),也可能是平原(用"P"表示),如......
  • mysqlbinlog 查看binlog时报错unknown variable 'default-character-set=utf8'【转】
    下午在排查MySQL主从同步问题时,想从主库的binlog中找一些线索,裸的binlog文件是无法直视的,mysqlbinlog这个工具是用来查看binlog文件内容的(使用方式manmysqlbinlog查看),但是......
  • 29 | JAVA集合Set(一种接口,Map的同级映射)
    Set如果我们只需要存储不重复的key,并不需要存储映射的value,那么就可以使用Set。Set用于存储不重复的元素集合,它主要提供以下几个方法:将元素添加进Set<E>:booleanadd(E......
  • 【js】for 循环中使用 setTimeout 的问题
    问题:下面代码的输出结果不是间隔3秒依次输出1,2,3,4,5。而是隔了3秒连续输出6。这是为什么呢?for(vari=1;i<=5;i++){setTimeout(functiontimer(){......
  • 异常java.sql.SQLException: Before start of result set
    使用rs.getString();前一定要加上rs.next();原因:ResultSet对象代表SQL语句执行的结果集,维护指向其当前数据行的光标。每调用一次next()方法,光标向下移动一行。最初它位于......