2023.9 做题纪要 #1
2023.8.31
虽然不是九月吧,但是马上就九月了所以直接并到九月了。
开始板刷 AtCoder 紫题,提高紫题通过量提高过简单题的速度,就当熟悉下新机房了。
ABC133F Colorful Tree
树剖线段树板子。需要写个动态开点。反正咋写都行。当熟悉新机房键盘了。
ABC134F Permutation Oddness
排列很难考虑,把它看作一张图,那么怪异度就是所有线段长度之和,考虑对这个图进行 DP,从左到右确定连边,记录有多少边往右连有多少边往左连,当前点一定有一个入边一个出边,然后讨论一下当前点怎么连就行了。发现当前向右连的边数一定等于向左连的边数,所以可以只记录一个。
ABC135F Strings of Eternity
如果
ABC136F Enclosed Points
直接拆贡献,考虑每个点被统计贡献的方案,简单容斥可以得出方案数。
2023.9.1
本来打算打下模拟赛的,T4 做过,遂咕之。前三道题口胡完了,懒得写了。
CSP模拟32T1: 考虑把传播的过程直接拆开,每次走一层,这样一共转移
T2: 考虑一种构造:
·····
·····
·····
·····
·····
·····
类似的东西。
T3: 图是内向基环树,直接每次贪心地从叶子覆盖然后删点,最后环上枚举断开位置,复杂度
T4:可以证明答案在下标模
继续水题。
ABC137F Polynomial Construction
直接拉插就能
弱智做法:考虑零点处容易构造,其它的点值全部
另外做法:我们能构造出一个函数
ABC138F Coincidence
首先发现如果两个数最高位不相同一定不合法,因为异或得
ABC147F Sum Difference
写一下式子,把没用的常数都去掉,可以得到最后大概等于一个
ABC155F Perils in Parallel
区间异或直接变成差分,这样相当于每次可以将两个数反转,问能否使得最后为
ABC157F Yakiniku Optimization Problem
首先显然二分答案
关于求两个圆的交点:
设两圆心之间的距离为
2023.9.2
美好的一天从水题开始。
其实我很困。
ABC163F path pass i
这是不是某场模拟赛的 T1 来着。水提交了。就直接统计不经过一个点的路径数,就是每个连通块任意选两个数,咋做都行。Kaguya 是不是大力推崇 DFS 一遍就完了来着。
不做 ABC 紫了,太有病了。
AGC001E BBQ Hard
no comments.
AGC001D Arrays and Palindrome
酷炫构造,虽然考过。still no comments.
AGC002F Leftmost Ball
不处理。
考虑我们一开始不管颜色是什么,我们只在一个颜色第二次出现(即第一次出现且没被染色)的时候再考虑这个球是什么颜色。而我们发现一件事情,就是当这个球出现了第二次之后,剩下的出现就可以任意填了,如果我们知道后面还剩下多少空位那就可以直接计算出方案数了。那么我们考虑不记录颜色,最后再乘一个
AGC002E Candy Piles
很容易把博弈写成在一个阶梯状的形状上博弈的形式。直接写一个博弈 DP。画个图出来,很容易发现规律,直接按规律求值即可。
2023.9.3
上午机房网没了。然后看了一遍化学必修一,看不下去了然后去隔壁交换机把网线拔了重插了一次,网好了。😓
然后 SoyTony 就开始卷 whk 了,我继续颓 AGC。
AGC003D Anticube
考虑到如果我们能把所有数质因数分解了,那么只要把所有指数模
那么我们写一个 Pollard-Rho 即可考虑到我们很难直接大整数质因数分解,那么可以阈值分治一下。首席按我们可以把指数模 我们不分解。考虑到如果两个质因数都只能出现一次,而其对应的集合就必须出现两次,而两个
AGC003E Sequential operations on Sequence
首先我们可以将所有最小值拿出来,显然只有这些是有用的。然后我们就得到了一个上升序列。我们设
AGC003F Fraction of Fractal
首先我们考虑相邻的两个形状是否能联通。有可能上下联通,左右联通。如果两者同时联通,那么任意一个状态都是只有一个连通块,否则任意情况下都是
2023.9.4
摆烂。
AGC004E Salvage Robots
贺了。
考虑移动出口而不是移动机器人,每次移动会使得边界缩小。然后就不会了。
发现移动一定会将当前形成的矩形全部覆盖到,那么我们就可以直接记录当前已经访问的矩形
AGC004F Namori
弱智了,不会做。
考虑进行一步转换,将图黑白染色,此时操作就变成了将两个不同颜色的点交换顺序。先考虑树的情况,这时候容易得出合法条件是黑点与白点点数相同。考虑每条边被经过的次数,只需要知道子树内有多少点需要更改即可。那么我们给一个黑点设权值
考虑基环树的情况。如果环长为偶数,那么仍然是可以黑白染色的。我们可以先任意找一条边断开,然后做上面的过程。那么考虑这条边的贡献,我们设这条边交换了
如果环长为奇数,那么发现黑白染色之后会存在一条边两边同色,操作这条边意味着同时修改两点颜色。那么我们可以考虑当前黑白点的差值
AGC005E Sugigma: The Showdown
高水平博弈论。只想到了第一步。我菜。
首先考虑什么情况下是永远也抓不到的。容易想到一种情况就是 A 一直在两个节点间反复横跳,这时候需要满足 B 树上两个节点之间的长度大于等于
那么考虑以
注意到一点,就是 A 是无法穿过 B 的,因为 A 最多只能走两格,而如果 A 通过走两格穿过了 B,B 一定可以回头把他抓住。那么此时 A 一定在 B 的子树内,那么 B 的最优策略也就显然是一直往 A 的子树内走了。那么我们就可以很容易确定 A 能够走到哪些点上了,只需要满足 A 在路径上每个点都不被 B 抓住即可,这个简单模拟即可。那么我们就可以 DFS 一遍知道 A 都能到达哪些点,如果能够到达关键点则答案
AGC005F Many Easy Problems
我做法太弱智了,简单写下。
首先点集连通块大小可以用寻宝游戏的做法去做,按照 dfs 序排序后将两两距离加和除以二就是生成树的边数,加一就是答案。那么大致就是一个
拆式子,后面那个
考虑生成函数,中间组合数的生成函数显然是
直接把
我做法是不是所有题解中最复杂的做法。
2023.9.5
快过去一周了!来看看我都干了些什么吧!啥都没干吧。
早上看了眼 22 高考数学,貌似还好,虽然好像解析几何占大量,我没学过。
为啥我不看 23 高考数学啊。
AGC006C Rabbit Exercise
貌似之前胡策搬过,忘了哪场了。
考虑过一个点对称就是
AGC006E Rotate 3x3
我觉得这个题比前面的那几个紫题都简单吧??
首先考虑操作本质,发现一列之间的数是不会变的,而且只有正序和倒序两种状态,那么我们先判断是不是这样的,如果不是直接判无解。然后我们把正序看作正数,反序看作负数,那么我们的操作就是将连续三个数取反,并将前后两个数交换。问从初始状态能否变成
继续观察,发现一次操作会使得奇数位置 / 偶数位置的两个数交换,那么说明奇数位置和偶数位置不可能进行交换,可以再判一下无解。然后我们考虑奇偶的负数个数的奇偶性与逆序对数的奇偶性。进行一次操作后,奇数逆序对数奇偶性改变,偶数负数数量奇偶改变,或反过来。那么我们就必须满足奇数逆序对奇偶性等于偶数负数数量奇偶性与其反过来。
而可以证明,除了以上几种情况外,一定有解。考虑构造使得任意两个位置奇偶性相等的数符号取反的操作。可以先构造两个相邻的数取反,若两个数不在边缘,那么可以通过
AGC006F Blackout
我不会做。
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
首先容易转化成图论模型。首先每个连通块肯定分开计算答案。然后不会了,摆烂了。
考虑对图进行三染色。如果不能够三染色,那么可以构造使得这张图变成一个完全图。证明咕了。
如果能够三染色,但是只有两种颜色,即不存在
否则每两个颜色不同的点之间都能连边。证明也咕了。
所以直接 dfs 即可。
AGC007C Pushing Balls
高级期望题。单独开篇博写了。
link。
AGC007D Shik and Game
但是这个 D 突然就变得非常平凡了。
首先我们肯定是碰到小熊立刻给糖,这样我们的路线应该是会在中途折返若干次收集金币。注意到,若在某一时刻折返回去拿所有金币,在回来的路上一定也能够将所有的金币收集到。因为相邻两个给糖果的时间差与相邻两个给金币时间差是相等的。那么我们只需要计算什么时候能够拿到折返后的第一个糖果即可。那么可以列出 DP 式子:
这个式子很容易数据结构维护,后面的那个
2023.9.6
摆大烂。
AGC008F Black Radius
考虑用一个唯一的二元组
同时,我们先不考虑全集,所以钦定所有子集都不能是全集。那么我们考虑什么情况下才会满足这样的条件。
不能是全集:那么只需要满足距离 最远的点的距离大于 ,设这个数为 ,那么 ; 没有出边 满足 :首先显然 ,那么我们只需要令每一个 都存在一个点 使得 ,即 。首先 不能在 子树内,那么其实后者就不重要了,因为只要存在一个 ,那么一定能找到一个点满足上述条件。那么我们就只需要知道 最大的值是否 即可,即不在 子树内最大的 是否 。而由于我们是对每一个 都要求,那么我们只需要满足所有子树中次大的距离 ,我们记它为 ,那么只需要满足 。
发现,由上面两个条件可以得出
考虑关键点,容易发现加上关键点的限制之后相当于增加了一个下界的限制。因为上述的“若某一个节点
AGC010C Cleaning
相对简单的多,感觉到不了紫。
首先容易发现叶子上的数代表往上的路径数。考虑剥叶子,计算某一个节点的子树内一共有多少条叶子往上的路径经过他。根据当前节点的数,可以得知有多少条路径会从这里汇聚,剩下的路径继续往上。我们只需要知道最多有多少条路径可以汇聚在这一点即可。这是一个经典问题,答案就是若最大值不超过总数一半,则能够全部匹配;否则,用所有的值去匹配最大值。根节点剩下的路径数为
AGC010D Decrementing
有趣博弈论,不是很难。
考虑如果没有第二步操作,那么这就是一个弱智题,容易发现我们的答案只与和的奇偶性有关。但是此时有了第二步操作就不一定了。
不过我们同样可以用同样的思路去考虑。我们首先有一个重要结论:只有除以
接下来我们分情况讨论。若
AGC009C Division into Two
直接 DP,设
但是这样会出错。因为这样并没有保证
AGC010F Tree Game
之前模拟赛考过的,炒冷饭了属于是。
考虑到我们肯定不会往比自己权值大的方向走,因为这样对手可以再走回来,走到最后一定是你死,那么我们就只会往大的边走。然后就是个简单博弈了。
AGC009D Uninity
高级题目。想不到怎么转化问题。
问题相当于要建一棵点分树,使得深度最小。我们考虑将每个点的最深深度写在这个点上,考虑这样的深度序列有什么性质。
发现:若有两个点
那么我们考虑贪心构造这个东西。我们采取能填就填的策略。那么我们记
; 。
那么只需要贪心的去维护即可。根据点分树的知识,容易知道深度不会超过
求得
AGC011C Squared Graph
AGC 好多这种构造图的题。
题目看着很抽象,我们这么去考虑:任意选两个点,让这两个点沿着图同时移动,问最少选多少点对进行这样的移动能够访问到所有点对。
那么我们先把原图按照连通块拆开。这样我们考虑所有的连通块对,不同的连通块对之间显然是互不影响的。考虑对每个连通块进行黑白染色。我们称一个连通块能黑白染色为好块。如果选择的两个点都在好块内,那么一次移动两个点所在的颜色同时改变,则两个颜色相等关系是不变的。同时,也容易构造出方案遍历所有的点对,于是这样的情况就需要两对点。而如果选择的期中一个点不在好块内,那么我们找到一个奇环一直绕,就能将黑白两个连通块连接了,于是就只需要一对点。需要注意一个点的连通块,这时候它哪里也移动不了,所以就是点数大小个点对了。
把所有 AGC 的
想了想,这个做题纪要以周为单位吧,一周开一个博,好像不错的。要不要引流?好像本来也没人看,是不是没啥意义。
2023.9.7
不知道有没有啥可记的,接着 AGC 了。
AGC011D Half Reflector
事实证明还是得手模,好像手模发现一点性质这题就做完了。
我们发现,如果开头是
- 若为
,那么我们会在这两个装置上各反弹一次,变为 ; - 若为
,那么会直接过去,变为 。
发现,经过之后前一个字符永远都是
继续手模,发现一直进行这个操作后会变成
AGC011E Increasing Numbers
感觉有点诡异。
考虑贪心,每次选一个最长的上升序列
加
比较优美的做法:
一个上升数可以表示成
首先有显然的必要条件,就是各数位和不超过
AGC011F Train Service Planning
首先我们发现,令第一辆车不停是不劣的。两辆车同时走不好考虑,我们考虑变换一下坐标系,让第一辆车不动,然后第二辆车的速度从
AGC012C Tautonym Puzzle
简单构造。
考虑将整个数列分成两半,只允许出现左边与右面子序列相等的情况。
这种题很常见的去构造
今天摆的有点严重了。寄。
2023.9.8
困困困困困困困困困困困困
发现 tetr.io 还是很好玩的。上 10 级了,可以挑战 tetra league 了哈哈。
中午尝试打打 WTF 玩。rating 下限 2000 分,这题是不是难度会巨大高啊。感觉会掉大分。(事实证明啥都不会,直接摆烂)
AGC012D Colorful Balls
我们将能进行交换的两个球连边,这样每个连通块内的球可以任意交换顺序。那么显然我们只需要知道联通情况就行了,然后计算就是简单的多重组合数。
考虑快速建图。发现我们只需要将每个球与其能相连的最小重量的球相连即可(同颜色间最小的与不同颜色最小的),连最小的肯定不劣。
AGC013C Ants on a Circle
应该说是挺套路的题。
首先有重要观察:蚂蚁之间的相对位置关系显然不会改变。
但是反弹这件事情并不好考虑,我们考虑将其转化为:蚂蚁之间不反弹,而是交换他们的编号。这样我们容易发现每一只蚂蚁的最终位置是极其容易计算的,只需要知道他最后的编号是什么即可。
而又由于相对位置关系不会改变,那么当两只蚂蚁交换编号时,这两只蚂蚁的编号一定是
然后就是发现同时动非常难考虑,考虑让与蚂蚁反向的那些直接静止,只让它自己动,这样我们就是要找区间内有多少只蚂蚁了,这个是很容易计算的,只需要知道经过了多少个周期再二分找到分界点即可。注意参考系变换之后速度为
AGC013D Piling Up
考虑枚举最一开始的球有
AGC013F Two Faced Cards
感觉非常有难度的题啊,完全不会了。想模拟费用流,但是想了想觉得啥都不对然后就扔了。果然我还是不会贪心,感觉贪心好难。
这是一个类似于二分图匹配的问题,根据 Hall 定理容易转化成以下问题:
有一个序列
, 个二元组 ,每个二元组选择两个数中的一个,使得 区间 ,对于每一个 令 区间 ,问最多选择多少个 ,使得任意位置 。
对于每次插入一个二元组,我们先直接枚举选的哪一个,那么就相当于对
问最多选择多少个
,使得 。
我们先钦定全部都选
有一个序列
,给定 个区间 ,选择最少个区间进行 ,使得 。
接下来我们可以证明一个性质:对于最大的
证明:
假设存在一组最优解中没有
,而覆盖 的右端点最靠左的区间为 ,那么:
若
,即需要满足 ,那么至少存在两个区间覆盖了 ,那么 的右端点必定被两个区间覆盖,而又因为 是最大的 的位置,那么说明 的,这些位置只需要被一个区间覆盖即可,那么此时我们可以将区间 换为 ,条件仍然能够满足。 若
,即需要满足 ,那么 往右的所有位置已经满足条件了,此时将左端点设为更小的区间肯定不劣。
那么我们就得到了一个贪心的算法:每次找到
那么进行完这个操作之后,所有的
具体维护:首先离散化,然后每次查询的端点都是单调递减的,而所有的区间都一定包含当前点,所以可以用堆来维护修改区间的左端点,可以快速计算当前点被区间加了多少次。第二部分和第一部分的操作本质是相同的。
2023.9.9
上午水哥把网关了。然后就打模拟赛完了。模拟赛题有点水了。
然后下午水哥问我怎么跟着打比赛了,我可以不跟着打的,我说我知道我可以不打,但是网关了闲的没事就打了。
今天当给我自己放假了。
下午讲了个题,然后摆了一会,去班里吃蛋糕(为信奥准备的送别礼)
把昨天那个 AGC F 写了。然后真的困了,摆烂了。
打算先把 板刷 AGC #1 做完,然后把之前在南外的遗留问题解决。
2023.9.10
I think: Pikachu 都会高数,好可怕。
假设
我会做初中 MO 题了,哈哈。
今天电脑第三次假死了,不太懂原理,反正就是突然电脑黑屏然后自动注销,登录不了,开虚拟终端随机杀几个进程就好了。这次杀了半天没发现问题,杀了个 clash 好了。被 clash 刺杀了属于是。
AGC014D Black and White Tree
观察样例,可以发现:若一个点有两个儿子为叶子节点,那么先手直接操作这个,后手操作完之后一定剩下一个儿子节点不被操作,此时操作一定胜利。
这意味着,只要先手操作一个点,这个点有儿子为叶子节点,那么后手必须要操作这个叶子节点。
那么我们就可以按照这样的策略去做:每次选一个叶子,将其父亲染色,这样后手一定会把这个叶子删掉。假如对于某一个点,它的所有子树都被染色了,那么这个点就不能被染色,只要有一个子树没有被染色那么它就必须被染色。那么我们只需要知道,是否存在一个根节点
AGC014E Blue and Red Tree
还是很显然的,策略就是能删就删。只要一条边仅被覆盖了一次那么就可以直接删对应的边,否则就不能删。直接树剖线段树维护覆盖次数即可。
简单的实现细节:维护这个边被哪条路径覆盖的时候,可以维护所有覆盖它的路径的异或和,这样只剩一条边的时候这个异或和就是覆盖路径的编号。
AGC014F Strange Sorting
超级大结论题。
Observation:对于一开始的序列来说,如果把数字
删去,那么接下来的过程中剩下的数的相对位置不会发生改变。
这个是显然成立的。那么这意味着,如果我们能够知道删去
那么我们就着重来考虑这个问题:如何求出将
设
Lemma 1:对于
的序列,进行 次操作后,开头数字 。
Proof:若,那么 一定是 high 元素,进行一次操作之后一定会到后面的位置,这与 次操作后排好序矛盾。
那么这意味着,开头的数字一定不是
但是我们并不能得知
为了证明这一结论,我们只需要证明,进行任意一次操作之后,
Lemma 2:在
的序列中, 为 high 元素,当且仅当 在开头。
Proof:反证法,假设某一时刻不是开头但是成为了 high 元素,那么进行一次操作后它前面的 high 元素 会与 紧挨在一起,而只有 成为 low, 成为 high 的情况下两者会分开。而出现这种情况的前提是 前面还有别的数为 ,所以这种情况发生后 又会与另外一个数紧挨在一起,所以 不可能成为第一个数。
有了这个结论,我们可以直接讨论任意时刻下
- 若
在开头,那么:- 若
为第二个数,那么 为 high, 为 low,循环顺序不变; - 若
为第二个数,那么 为 high, 为 ,循环顺序不变; - 否则
为 high, 为 ,循环顺序不变;
- 若
- 若
在开头,那么 为 high, 为 low,循环顺序不变; - 若
在开头,那么 为 high, 为 low,循环顺序不变; - 否则
均为 low,循环顺序不变。
那么做法就很简单了,我们只需要判断最一开始
AGC015D A or...or B Problem
貌似是去年省选模拟赛考过的题?当时 AT 交的代码 WA 了,我就直接咕了。
其实也是不难的。首先两个数的 LCP 肯定是没有用的,直接删掉。
首先我们知道,得到的数一定全部
是不是本来说这个博一周开一个的。算了发现 AGC #1 要做完了,把剩下的更完了再开新博吧。做完 AGC #1 颓会 whk。
2023.9.11
今天是 911。 今天大概能把 AGC #1 做完了吧。打算做完剩下几道题 whk 一会。
昨天把学考报了,感觉 12 月就要考五科我完全没学的科,有点恐怖。所以我还是应该把高一 whk 补一下吧。要不然五科全过不了就比较傻逼了。
希望我能过两科!
怎么今年精英培训 50 个人。那这下子我好像还能报,把高二去掉正好 49 名,呃呃。那要报名吗。
AGC016D XOR Replace
不算很难。考虑将一个数变成全局异或和,相当于将这个数异或上除了这个数以外的所有数,这会使得全局异或和变成选择的这个数。那么发现,这个操作实际上是将某个数与全局异或和进行了交换。那么这其实就变成了一个排序问题。
我们首先将所有
AGC015F Kenus the Ancient Greek
确实绷不住了,翻了五六篇题解终于凑出了这个证明。题蛮酷的,但是这题是真的没人证明啊我真的绷不住了。
不过还是证不出来官方题解里面那个
首先考虑如何求最大的值是多少,这个是很经典的,众所周知用斐波那契数可以将欧几里得算法次数卡到最大,所以我们只需要找出最大的
关键在于如何计数。首先减少有用的数对,我们只关心所有
但是对子的数量仍然是很多的,例如所有
是 对子; 。
前者原因是显然的。考虑证明后者。
假设存在一个
那么
首先考虑
考虑由
首先,对于每一个
那么存不存在
首先我们发现,除了
而对于
不等式证明,真你妈阴间,放缩到吐了。
那么我们就可以简单的在
AGC016F Games on DAG
个人感觉很有意思。
首先题目显然是一个组合游戏,那么两个棋子的 SG 值不相等则先手必胜。
那么我们相当于要对 SG 值进行 DP。题目中的条件很容易让我们往拓扑序的方向去想,但是如果按照拓扑序依次确定 SG 值,需要记录的东西太多,无法接受。
考虑按照 SG 值来分层 DP。我们首先确定哪些点的 SG 值是
AGC001-016 完结撒花 🎉
这篇博到这里吧,开篇新博了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通