「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.

Solution Set -「AGC 001~003」C~F的更多相关文章

  1. Note -「圆方树」学习笔记

    目录 圆方树的定义 圆方树的构造 实现 细节 圆方树的运用 「BZOJ 3331」压力 「洛谷 P4320」道路相遇 「APIO 2018」「洛谷 P4630」铁人两项 「CF 487E」Touris ...

  2. Diary / Solution Set -「WC 2022」线上冬眠做噩梦

      大概只有比较有意思又不过分超出能力范围的题叭.   可是兔子的"能力范围" \(=\varnothing\) qwq. 「CF 1267G」Game Relics   任意一个 ...

  3. Note/Solution -「洛谷 P5158」「模板」多项式快速插值

    \(\mathcal{Description}\)   Link.   给定 \(n\) 个点 \((x_i,y_i)\),求一个不超过 \(n-1\) 次的多项式 \(f(x)\),使得 \(f(x ...

  4. Solution -「洛谷 P6021」洪水

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的带点权树,删除 \(u\) 点的代价是该点点权 \(a_u\).\(m\) 次操作: 修改单点点权. ...

  5. Solution -「APIO 2016」「洛谷 P3643」划艇

    \(\mathcal{Description}\)   Link & 双倍经验.   给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...

  6. 「查缺补漏」巩固你的Redis知识体系

    Windows Redis 安装 链接: https://pan.baidu.com/s/1MJnzX_qRuNXJI09euzkPGA 提取码: 2c6w 复制这段内容后打开百度网盘手机App,操作 ...

  7. LOJ6003 - 「网络流 24 题」魔术球

    原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...

  8. LOJ6002 - 「网络流 24 题」最小路径覆盖

    原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio&g ...

  9. LOJ6001 - 「网络流 24 题」太空飞行计划

    原题链接 Description 有个实验和个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬仪器花费),并输出一组方案. Solution 实验向所需仪器连边,实验的点 ...

  10. 「NowCoder Contest 295」H. Playing games

    还是见的题太少了 「NowCoder Contest 295」H. Playing games 题意:选出尽量多的数使得异或和为$ 0$ $ Solution:$ 问题等价于选出尽量少的数使得异或和为 ...

随机推荐

  1. 2.17 新手必看的Linux服务器管理和维护注意事项

    本节介绍有关服务器管理和维护过程中的一些注意事项,都是笔者的经验之谈,相信对新手会有一定的启发和帮助. 很多初学者接触Linux 时间不长,还未完整地学习一遍 Linux,理解本节内容可能有些困难,可 ...

  2. cgo:go数组转c数组调用c函数

    package main /* #include <stdio.h> void processInt2DArray(int* arr, int rows, int cols) { for ...

  3. FPGA开发中的复位问题

    一.为什么需要复位? 在FPGA上电时,需要对reg.fifo等器件进行复位,以确保系统处于已知的状态,同时可以通过复位清除系统的错误异常状态. 二.复位的方式 从是否与时钟同步与否可以分为异步复位和 ...

  4. 鸿蒙NEXT开发案例:随机密码生成

    [引言] 本案例将实现一个随机密码生成器.用户可以自定义密码的长度以及包含的字符类型(大写字母.小写字母.数字.特殊字符),最后通过点击按钮生成密码,并提供一键复制功能. [环境准备] •操作系统:W ...

  5. php yield使用

    在循环一个大数组的时候yield非常好用能节省内存. 比如有个大文件需要读取并处理,如果全部读出来太耗费内存,就可以这样做 <?php function getRows($file) { $ha ...

  6. 成为Java GC专家系列(3) — 如何优化Java垃圾回收机制

    本文是成为Java GC专家系列文章的第三篇.在第一篇<成为JavaGC专家Part I - 深入浅出Java垃圾回收机制>中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生 ...

  7. Jenkins之插件汇总

    Nodejs: 构建前端项目或Node项目 Build Name and Description Setter Publish over SSH: 远程执行shell命令 Blue Ocean   友 ...

  8. .NET Conf China 2024 AI相关内容解析

    .NET Conf China 2024中国 .NET 开发者峰会即将在上海召开,这次大会是一届完全由社区组织举办的中国.NET 开发者盛会,我们筹备大会之初就定下了大会的主题是"智能.创新 ...

  9. S2P彩蝶流向数据管理穿透到终端才有意义

    这两年我们也是在医药行业服务当中见证了行业的变化和趋势,流向管理系统,至少到目前,在行业当中将会是很大的趋势. 01过去粗放的流向管理方式 早在十年前,整个医药行业,特别是外资企业.对实时流向管理,流 ...

  10. ShellProgressBar控制台中漂亮的显示进度条

    ShellProgressBar控制台中漂亮的显示进度条 ShellProgressBar库的使用 控制台程序有时也需要进度条来显示任务执行的详细进度,最近就发现了一个第三方的类库叫ShellProg ...