Solution Set -「AGC 001~003」C~F
- 「AGC 001C」Shorten Diameter
- 「AGC 001D」Arrays and Palindrome *
- 「AGC 001E」BBQ Hard *
- 「AGC 001F」Wild Swap ^
- 「AGC 002C」Knot Puzzle
- 「AGC 002D」Stamp Rally ^
- 「AGC 002E」Candy Piles ^
- 「AGC 002F」Leftmost Ball
- 「AGC 003C」BBuBBBlesort!
- 「AGC 003D」Anticube ^
- 「AGC 003E」Sequential operations on Sequence
- 「AGC 003F」Fraction of Fractal *
「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), x 和 y 同址的时候好像是 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\) 种颜色的球的方案数. 转移只需要讨论当前复制位置是白球还是新颜色即可 (旧颜色什么都不会发生). 具体转移如下:
\]
复杂度 \(\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\), 那么存在递推关系:
\]
矩阵快速幂一下就 \(\mathcal O(nm+\log k)\) 了.
没有思路总得做点什么, 比如大力分讨 qwq.
Solution Set -「AGC 001~003」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)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...
- 「查缺补漏」巩固你的Redis知识体系
Windows Redis 安装 链接: https://pan.baidu.com/s/1MJnzX_qRuNXJI09euzkPGA 提取码: 2c6w 复制这段内容后打开百度网盘手机App,操作 ...
- 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:$ 问题等价于选出尽量少的数使得异或和为 ...
随机推荐
- Next.js 从零入门到实战 3:2024最新完整教程 | 包含SSR、API路由和性能优化
CSS样式学习 上一篇文章讲到如何创建一个脚手架程序,目前我们已经有了一个nextjs的基本框架,因此我们可以在这个基础上进行改造.打开我们项目中的page.tsx页面,这里是程序的主页面,也就是我们 ...
- GAN和CGAN——生成式对抗网络和条件生成式对抗网络
GAN的定义 GAN是一个评估和学习生成模型的框架.生成模型的目标是学习到输入样本的分布,用来生成样本.GAN和传统的生成模型不同,使用两个内置模型以"对抗"的方式来使学习分布不断 ...
- pnpm 是如何颠覆 npm 和 yarn 的?
今天研究了一下 pnpm 的机制,发现它确实很强大,甚至可以说对 yarn 和 npm 形成了降维打击 . 我们从包管理工具的发展历史,一起看下到底好在哪里? npm2 在 npm 3.0 版本之前, ...
- LGR-204-Div.2
Contest link 质量不错的比赛. A 比较明显的题,贪心往下做就可以. #include <bits/stdc++.h> using i64 = long long; const ...
- DevEco Studio 实战第一节:字符串拼接与组件构建
DevEco Studio 实战第一节:字符串拼接与组件构建 引言 在现代软件开发中,TypeScript 提供了强类型的优势,而 DevEco Studio 作为华为推出的开发集成环境,提供了便捷的 ...
- redis 使用lua 生成流水号
在实际的业务场景中,我们会用到流水号. 之前的流水号做法是,使用redis的全局锁.然后对数据库进行更新,数据库更新 这个也会有一些问题,比如对于同一个流水号,多个线程去更新,由于事务比较长,那么就会 ...
- IEDA 控制台乱码解决
1.修改idea 目录下的文件 idea64.exe.vmoptions idea.exe.vmoptions 在这个文件尾部增加 -Dfile.encoding=UTF-8 2.编辑ieda 文件配 ...
- MeteoInfo-Java解析与绘图教程(十)_JAVA绘制雷达PPI图
天气雷达的基本要素有很多,特别是双偏振雷达更多,但业务场景经常使用的一般为基本反射率,基本速度这两种要素 接下来我们以基本反射率为例,其他的要素也是一样的,一通百通 首先我们做基本反射率的图需要确定做 ...
- K8S deployment 重启的三种方法
一般重启deployment,常规操作是删掉对应的pod, 但如果有多个副本集的话,一个个删很麻烦.除了删除pod,还可以: 方案一: 加上环境变量kubectl patch deploy <d ...
- Alpine中安装telnet
lpine Linux是一个基于musl libc和busybox的安全轻量的Linux发行版. 在Alpine中安装telnet,并不是apk add telnettelnet被移入子包busybo ...