Solution Set -「AGC 010~012」C~F
- 「AGC 010C」Cleaning
- 「AGC 010D」Decrementing
- 「AGC 010E」Rearranging
- 「AGC 010F」Tree Game ^
- 「AGC 011C」Squared Graph *
- 「AGC 011D」Half Reflector *
- 「AGC 011E」Increasing Numbers
- 「AGC 011F」Train Service Planning *
- 「AGC 012C」Tautonym Puzzle *
- 「AGC 012D」Colorful Balls
- 「AGC 012E」Camel and Oases
- 「AGC 012F」Prefix Median *
「AGC 010C」Cleaning
Tag:「B.贪心」
你不觉得我出的这道题要难一点嘛. (
定义一个点的 "输出量" 为其需要的父亲向子树内走的路径条数. 叶子的输出量就是点权, 其他点的输出量可以直接唯一确定, 如果违背了一些条件自然就无解了.
「AGC 010D」Decrementing
Tag:「C.性质/结论」
如果不除 \(\gcd\), 设 \(s=\sum a_i\), 则先手的获胜情况仅与 \(s-n\) 的奇偶性有关. 另一方面, 如果 \(2\nmid\gcd\), 这个除法也并不会改变 \(s\) 的奇偶性, 也就是不影响答案. 因此, 我们需要关注的是 \(\gcd\) 中因子 \(2\) 的情况.
初步想一想策略: 若当前 \(s-n\) 下先手必胜, 那么先手疯狂操作偶数, 让 \(\gcd\) 永远不是 \(2\) 的倍数, 后手就寄了; 如果当前 \(s-n\) 下后手必胜, 并且先手无法一步让 \(2\mid\gcd\), 先手同理也寄了; 等等, 先手如果可以一步改变 \(\gcd\) 的奇偶性, 那么 \(a\) 中肯定有且仅有一个奇数且其 \(>1\). 先手只能操作它, 然后直接递归判断就好. 复杂度 \(\mathcal O(n\log a)\), 再算上暴力求 \(\gcd\) 的话就是 \(\mathcal O(n\log^2a)\).
「AGC 010E」Rearranging
Tag:「B.贪心」
初步解读题意: Aoki 的操作会让序列成为满足从左到右拓扑关系下字典序最大的一个, 而 Takahashi 则要初始化这个序列. 当然啦, 我们肯定是直接构造结果序列, 相当于去规定具体的拓扑关系, 然后在这个拓扑关系下构造最大字典序序列.
先考虑后者: 直接将拓扑排序过程中的队列换成关于权值的大根堆即可.
前面这个 ... 根据 \(a_u\not\perp a_v\) 可以生成一系列无向边, 我们的工作是将它们定向, 形成一个 DAG. 其实也是一个贪心: 每次从未遍历过的点权最小的点出发, 按点权升序枚举邻接点递归, 构造生成树. 正确性容易感性理解.
「AGC 010F」Tree Game ^
20221003 C 题. 可算找到这傻瓜题的出处了. (
「AGC 011C」Squared Graph *
Tags:「C.性质/结论」「C.思维」
兔, 根本不会分讨, 根本没有思维.
考虑 \((x_1,y_1)\) 与 \((x_2,y_2)\) 连通性, 我们需要尝试找到一条从 \((x_1,y_1)\) 走到 \((x_2,y_2)\) 的路径. 可见, 由于 \(((a,b),(c,d))\in E'\) 等价于 \((a,c),(b,d)\in E\), 所以从 \((a,b)\) 走到 \((c,d)\) 相当于让 \(a\) 沿着 \((a,c)\) 挪到 \(c\), 同时让 \(b\) 沿着 \((b,d)\) 走到 \(d\). 因此, \((x_1,y_1)\) 和 \((x_2,y_2)\) 连通的条件是: 原图上存在一对等长的, 分别连接 \(x_1,x_2\) 和 \(y_1,y_2\) 的路径. 稍作简化, 即存在两条长度奇偶性相同的简单路径.
路径奇偶性的话 ... 肯定需要讨论连通块是否是二分子图嘛. 设 \(a,b,c\) 分别表示非二分图连通块数量, 二分图连通块数量 (不含单点), 单点数量. 讨论三种连通块内部和之间的连通情况即可计算答案. 复杂度 \(\mathcal O(n)\).
「AGC 011D」Half Reflector *
Tags:「C.性质/结论」「C.思维」
看来这场 AGC 要爆零了 qwq.
不妨讨论小球正在某两个 reflector 中间运动的情况, 用 \(\text{l/r}\) 标记运动方向那么
- \(\text{ArA}\Rightarrow\text{AlB}\Rightarrow\text{BrB}\Rightarrow\text{BAr}\).
- \(\text{ArB}\Rightarrow\text{AAr}\).
发现一件事情: 若一个向右滚动的小球的左侧有 \(\text A\), 那么这个 \(\text A\) 会保持在球的左侧不断地向右移动. 因此, 在这种情况下小球一定会从最右侧离开. 换句话说:
- 只要第一个 reflector 不是 \(\text A\), 小球一定会从右侧离开.
当然, 第一个 reflector 就是 \(\text A\) 的情况太平凡了, 我们只去研究后者. 根据先前的结论, 小球左侧第一个 \(\text A\) 再左边的 reflector 的状态一定不会再因当前小球改变了. 况且, 在小球第一次出现在两个 reflector 中间时, 左侧的 reflector 一定是 \(\text A\) 状态. 所以我们就需要考虑上面列举的两种情况下, 左侧 reflector 的变化情况. 可见, 当右侧为 \(\text A\) 时, 左侧变为 \(\text B\); 当右侧为 \(\text B\) 时, 左侧变为 \(\text A\). 顺便结合边界情况的单独讨论, 我们可以得到一个简洁的结论:
- 当第一个 reflector 不为 \(\text A\) 时, reflectors 的整体变化情况是: 全部取反, 然后循环左移一位.
到此, 我们已经可以 \(\mathcal O(k)\) 地模拟整个变换过程了. 接下来的工作无非是找到变换的周期性特点. 注意在一次循环位移后, 最后一个 reflector 一定是 \(\text A\), 则下一次的倒数第二个一定是 \(\text B\), 再下一次倒数第三个又是 \(\text A\), ... ,每两个小球中至少有一个会引起位移, 那么最多 \(2n\) 个小球就能让序列恒定在 \(x(\text{AB})_k\) 的状态, 直接去求最终状态就好啦. 复杂度 \(\mathcal O(n)\).
「AGC 011E」Increasing Numbers
Tag:「B.Tricks」
算是经典 trick 吧, 一个 increasing number \(x\) 可以表示成
\]
设 \(N\) 由 \(k\) 个 increasing numbers \(\{x_k\}\) 表示, 那么
\Rightarrow 9N+9k=\sum_{i=1}^k\sum_{j=1}^910^{x_{i,j}}.
\]
由于 \(x_{i,j}\) 很随意, 所以只需要 \(9N+9k\) 在十进制下的位和不超过 \(9k\), 我们就能构造出合法解. 又显然 \(k\) 是 \(\mathcal O(\log N)\) 的, 所以直接从 \(k=1\) 开始向上枚举 \(k\), 均摊 \(\mathcal O(1)\) 地维护 \(9N+9k\) 的值及其位和即可. 复杂度 \(\mathcal O(\log N)\).
「AGC 011F」Train Service Planning *
Tags:「A.数学-数学推导」「A.数据结构-线段树」
一大难点是抽象出这个数学情景.
令 \(p_i\) 表示 \(L\) 车 (\(0\to n\)) 在车站 \(i\) 停留的时间, \(q_i\) 表示 \(R\) 车 (\(n\to 0\)) 在车站 \(i\) 停留的时间. 同时, 记 \(S_a(t)=\sum_{i=1}^{t}a_i\), \(S_p(t)=\sum_{i=0}^{t-1}p_i\), \(S_q(t)=\sum_{i=0}^{t-1}q_i\). 那么, \(L\) 车行驶在区间 \((i-1,i)\) 的时间区间为
\]
同理, \(R\) 车行驶在区间 \((i-1,i)\) 的时间区间为
\]
对于 \(b_i=1\) 的区间, 我们要求
\]
注意两个区间是等长的, 所以有
S_a(i-1)+S_p(i) & \notin & (-S_a(i)-S_q(i),-S_a(i-1)-S_q(i))+tk, \\
S_a(i)+S_p(i) & \notin & (-S_a(i)-S_q(i),-S_a(i-1)-S_q(i))+tk.
\end{cases}
\]
先整理一下, 令 \(x_i=S_p(i)+S_q(i)\), 则上式变为
S_a(i-1)+x_i & \notin & (-S_a(i),-S_a(i-1))+tk, \\
S_a(i)+x_i & \notin & (-S_a(i),-S_a(i-1))+tk.
\end{cases}
\]
其中, \(\{x_{0..n}\}\) 是单调不降的. 也就是说, 从 \(x_i\to x_{i+1}\), 我们需要给出一个增量 \(d_i\ge0\), 使得 \(x_{i+1}\bmod k\) 不落在某些区间内. 显然, 为了最小化 \(x_n\), 若施加的 \(d_i\neq0\), 则 \(x_{i+1}\) 必然处于某个禁止区间的端点上. 用数据结构维护这一贪心过程即可. 复杂度 \(\mathcal O(n\log n)\).
「AGC 012C」Tautonym Puzzle *
Tag:「A.构造」
一看就是倍增构造, 不过如何找到一个能够轻松 \(\times 2/+1\) 的东西捏?
看了一眼题解, 啧, LIS 嘛. 在后面摆一个 \([1,2,\dots,100]\), 那么合法子序列总数就是前面部分的非空 LIS 数量了.
「AGC 012D」Colorful Balls
Tag:「A.并查集」
欸不是, 真不觉得这题比上面那个构造简单嘛 ...
有一个简单的暴力: 枚举 \(\binom{n}{2}\) 个交换关系, 并查集连边. 每个连通块对答案的贡献是一个多重组合数的形式, 可以直接算. 我们只需要简化一下建边的方式.
对于同色交换, 可以简并为和同色中最轻的球的连续交换; 对于异色交换: 显然也应该两种颜色的最轻球先交换. 这里有一个 corner: 有可能某个球无法进行同色交换, 但可以通过最轻的异色球转移到同色最轻球位置, 我们直接认为它可以进行同色交换就好. 复杂度 \(\mathcal O(n\alpha(n))\).
「AGC 012E」Camel and Oases
Tags:「A.DP-状压/插头 DP」「B.倍增」
我们一共有 \(c=\lfloor\log_2v\rfloor+1\) 次跳跃机会, 每次跳跃后必然可以覆盖掉相邻坐标差不超过 \(v'\) 的极长段. 换句话说, 我们需要选择 \(c\) 个分别满足相邻坐标差不超过 \(v,v/2,v/4,\dots,0\) 的连续段覆盖整个 \([1,n]\), 并且第一个连续段的位置是被钦定的.
设第一个极长段覆盖了 \([l,r]\), 那么我们需要把剩下的可用极长段分为两个集合 \(S,T\), 用 \(S\) 内的极长段尝试覆盖 \([1,l-1]\), 用 \(T\) 内的极长段尝试覆盖 \([r+1,n]\). 注意这其实和 \(l,r\) 的取值没关系, 我们直接 DP 求出 \(f(S)\) 和 \(g(T)\), 分别表示用 \(S\) 内的极长段从左侧开始能覆盖的最大右端点; 用 \(T\) 内的极长段从右侧开始能覆盖的最小左端点. 预处理一下倍增可以 \(\mathcal O(v\log v\log n)\) 求出来.
然后呢? 如果暴力枚举 \(S\) 去检查 \(T\) 还是 \(\mathcal O(nv)\). 不过, 如果从左到右算答案, 可以覆盖到 \([1,l-1]\) 的 \(S\) 将不断减少, 可以覆盖到 \([r+1,n]\) 的 \(T\) 将不断增多. 所以我们暴力维护有哪些 \(S,T\) 满足当前条件, 统计 \(S\cup T=U\) 的数量. 当这一数量非零则有解. 最终复杂度 \(\mathcal O(v\log v\log n)\).
「AGC 012F」Prefix Median *
Tags:「A.DP-计数 DP」「C.思维」
显然 \(b_n\) 为全局中位数, 这提示我们从后往前考虑 \(b\) 的构造可能会得到更强的限制. 从后往前, 每次可以删掉 \(a\) 的两个元素, 此时 \(b\) 在中出现位置的位移不超过 \(1\). 更细致的, 将 \(a\) 排序后, \(b\) 合法的条件为:
- \(a_i\le b_i\le a_{2n-i}\);
- \(\nexists i<j,~b_j<b_i<b_{j+1}\lor b_{j+1}<b_i<b_j\).
通过构造方案, 可知这个条件是充要的. 接下来对它 DP 即可. 令 \(f(i,l,r)\) 表示从后往前考虑到 \(b_i\), 对于当前这个 \(b\), 左边可以直接移动到的位置有 \(l\) 个, 右边有 \(r\) 个. 当边界处出现相等数时视为同一个, 枚举下一个 \(b\) 移动到的位置就能完成转移. 复杂度 \(\mathcal O(n^4)\).
Solution Set -「AGC 010~012」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道试题.每道试题都标明了所属类别.同 ...
随机推荐
- uni-app H5 腾讯地图无法导航
uni-app 打包H5腾讯地图无法导航 具体使用扫描二维码查看 前言: 最近几天用uni-app开发安卓和iOS应用,打包成APP安装包后,APP内做地图导航没有问题,APP内使用的是高德地图:但是 ...
- 常见return错误
常见return错误 3221225477 (0xC0000005): 访问越界,一般是读或写了野指针指向的内存. 3221225725 (0xC00000FD): 堆栈溢出,一般是无穷递归造成的. ...
- 我的博客网站为什么又回归Blazor了
引言 在博客网站的开发征程中,站长可谓是一路披荆斩棘.从最初的构思到实践,先后涉足了多种开发技术,包括 [MVC](ASP.NET Core MVC 概述 | Microsoft Learn).[Ra ...
- 研发LLM模型,如何用数值表示人类自然语言?
上一篇:<人工智能--自然语言处理简介> 序言:人工智能大语言模型(LLM)如何理解人类的自然语言?这个过程的核心在于将文本转化为计算机能处理的数值形式,经过计算,最终达到对语言的理解.起 ...
- isPrimitive:检测数据是不是原始数据
function isPrimitive(value) { return isStatic(value) || typeof value === 'symbol}
- ABP 接口访问变慢,缓存清理,请求超时
发布后过一个小时或者不久访问过慢 第一次访问慢,第二次访问变快 总结 发布后IIS 访问 过慢的原因考虑,IIS回收.缓存清理.去host项目里面配置缓存过期时间再去试验
- BIMFCE选择全量绘制
var webAppConfig = new Glodon.Bimface.Application.WebApplication3DConfig(); webAppConfig.domElement ...
- Sublime装sftp远程编辑插件
我平时很喜欢用Sublime来编辑一些脚本软件,本次需要远程编辑Linux上的脚本,需要安装一些插件来完成. Ctrl+Shift+P呼叫出命令行面板后输入 install选择 Install Pac ...
- Linux下使用谷歌输入法
Linux的中文输入法一直太烂,scim终于出来对googlePinyin的支持了. 安装步骤: 1.安装scim: sudo apt-get install scim 2.从git上checkout ...
- AbstractQueuedSynchronizer源码解析之ReentrantLock(一)
在上一篇笔记中提到concurrent包中semaphores, barriers, and latches等Synchronizer的介绍和使用,于是想深入的了解这些Synchronizer的原理和 ...