10月做题记录
10月做题记录
✩ trick
✯ 会大部分,要提示
✬ 会小部分/完全没想到,看了才会
◈ 脑电波
✡ 有某一算法的神秘通用性质
⊗ 待补
- 10月做题记录
- CF2018F Speedbreaker Counting ✬✩
- ARC157D YY Garden ✬
- ARC157E XXYX Binary Tree
- ARC157F XY Ladder LCS ✬
- P9062 [Ynoi2002] Adaptive Hsearch&Lsearch ✬✩
- P7599 [APIO2021] 雨林跳跃 ✯
- arc184A Appraiser
- arc184B 123 Set
- arc184C Mountain and Valley Folds ✬
- arc184D Erase Balls 2D
- arc110F Esoswap ✯
- P3641 [APIO2016] 最大差分
- P3777 [APIO2017] 考拉的游戏
- P5473 [NOI2019] I 君的探险 ✯
- arc185D Random Walk on Tree ✬
- CF1523E Crypto Lights
- P4448 [AHOI2018初中组] 球球的排列 ✩✯
- P3236 [HNOI2014] 画框 ✩
- P4155 [SCOI2015] 国旗计划
- CF348D Turtles
- agc068A Circular Distance ✯✩
- agc068B 01 Graph Construction ✯◈
- agc068C Ball Redistribution ✬
- P3765 总统选举 ✯
- [AHOI2005] 航线规划
- CF618G Combining Slimes ✬
- P3239 [HNOI2015] 亚瑟王 ✯✩
- CF804D Expected diameter of a tree
- P3750 [六省联考 2017] 分手是祝愿 ✩✯
- CF1267G Game Relics ✩✯
- CF1392H ZS Shuffles Cards ✬✡✩
- CF1411G No Game No Life ✯
- P8868 [NOIP2022] 比赛
- 单调栈+扫描线做法
- CF2023C C+K+S ✩✯
- CF2023D Many Games ✬✩
CF2018F Speedbreaker Counting ✬✩
非常牛题目,就是学
学傻了,乘法过后的取模写掉了,调了两个多小时/ll
首先,这道题是CF2019D Speedbreaker的进化版(?),那么CF2019D Speedbreaker的策略应该有用吧?诶,实际上没用,太邪恶了出题人!
如果你CF2019D Speedbreaker就用了这道题要用的那个很牛的性质当我没说(
这道题要用一个很重要的性质,设区间
还有一个很重要的策略,对于当前走到的区间
可以发现,每个
用这个策略证明该性质:
设
,假设从 开始( ),因为有 ,所以可能向右走的第一步一定是一直向左走到达 之后,假设在 处向右走,那么现在的区间为 ,那么向右走到的点如果还在 中,可以继续归类为 ,那么现在向右走的点 ,现在有区间 ,显然之后的步骤都一样了,且对于中途,如果有一个 不能合法的走了,那么所有的 都无法合法的走,那么得证
下面排除
来考虑能不能求出
这样得到
明显有很大的优化空间,考虑优化成
发现其实
那么现在来处理一个
感觉这个算个
,似乎没咋见过,但是好像又见过,如见(
再来考虑
我们直接以
, , , ,
且可以知道,从
那么
考虑之后的步骤,发现与
那么对于从
但是可以发现我们只确保了
似乎还看到了
感觉这道题咋越写越像
ARC157D YY Garden ✬
学了一个月
,糖丸了!尽显唐人气质,鉴定为唐人的课听多了导致的 以前做过?
设 Y
的总数为
那么总共会有
那么进一步的,每一块行中,有Y
,每一块列中,有Y
,发现在此限制下,分出来的每个块内的点的数量都相等,那么先
合法的
ARC157E XXYX Binary Tree
擦怎么这也做过
网上的做法
显然会有Y
,那么枚举一下根是否为 Y
,即可得到叶子有Y
又因为不存在 YY
,那么 Y
在树上就是独立集,则Y
,Y
,最多能有多少个 Y
那么树上背包即可,复杂度
这就是
想到的
前面跟上面差不多,枚举根是否是 Y
,然后确定叶子有几个 Y
,非叶子非根有几个 Y
对于叶子,把 Y
尽量填在兄弟上,然后从低层到高层,尽量给低层的填 Y
即可,显然舍弃低层填 Y
给其父亲填 Y
不优
复杂度
ARC157F XY Ladder LCS ✬
可以发现,任意三对数必有两组匹配,那么
设
复杂度
P9062 [Ynoi2002] Adaptive Hsearch&Lsearch ✬✩
套用平面最近点对的网格化做法:选取答案
发现边长取
这道题因为答案
那么找到一个
看题解区有人说的是每个格子内
个点,我有个神经的证明能证明是 的( 考虑格子中的一个点
,因为不存在和它距离 的点,画出以 为中心,半径为 的圆,圆在格子中最小的面积为 ,格子总面积是 的,那么点数最多就是 的,也就是 的
好像说因为常数很多,用树状数组维护会被卡常,所以要用
总复杂度
P7599 [APIO2021] 雨林跳跃 ✯
因为一道模拟赛的
的结构和这个类似就做了,用笛卡尔树想的,但是树上做很麻烦啊,不如直接序列上做,还是不要太定式思维的好
现在把操作看成,删去序列中所有值小于当前值的数,然后每次可以往左或往右跳
考虑最后一步,设
那么只要此时的
现在来考虑中间的过程,若先不考虑能一步走到终点的情况,那么显然
直接跳 如果 ,那么一步就可以到终点,否则是两步 一步 从现在起只能向右跳
然后倍增优化过程即可,复杂度
arc184A Appraiser
尝试将序列分成一块一块的,然后询问每个块内元素的关系,若块的大小是
发现
但是发现
注意到如果当前块是上述情况,那么只需要再用其它块的任意一个数和当前块的第一个数问一次就知道答案了
当这个块是最后一个的时候,在前面算的时候记录一下真币和假币的数量,那么到最后一个的时候就能直接判出来了,此时步数是
当它不是最后一个的时候,假设是第
复杂度
arc184B 123 Set
画出
进一步,层数是
发现图有很多个,不能全部枚举,但是显然有很多长的一样,具体的
复杂度
arc184C Mountain and Valley Folds ✬
不会这种题啊,有种好像啥性质的知道但是就是做不出来、看了题解又觉得不难的感觉,怪怪的
发现放置的特点:上一步把当前区间划分成两个区间后,在左边用山谷划分成新的两个区间,右边用山峰划分成新的两个区间
用 v
表示山谷,^
表示山峰
有这样一个性质:把奇数位的折痕都提出来,发现形如 v^v^v^v^...
,证明考虑数学归纳法,只有一个的时候显然是 v
,若当前有
进一步可以发现,对于v^v^v^...
,同样数学归纳法可得证
那么当
那么可以递归
对
发现对于
前者可以算出
复杂度
arc184D Erase Balls 2D
我说我咋做不出来题解也看不懂,原来是看错题了哈哈哈,选择的球不用删啊/ll
记录剩下的球的集合显然不好弄,考虑把剩下球的集合转换成一一对应的选择球的集合
首先,显然选择球会在剩下球中且选择的球间两两不存在偏序关系,那么考虑尽量选球,显然对于集合中,存在偏序关系的球不能选,不存在的能选,那么也就转换成了:除选择的球的外,再任选一个球都会导致删除别的球
复杂度
arc110F Esoswap ✯
发现对一个点连续操作
那么此时自然的会想,能不能从
那么考虑反着来,先把
复杂度
P3641 [APIO2016] 最大差分
子任务
这个就是每次问到最大的和最小的过后递归下去问次小和次大的,这样就能确定所有数的取值
子任务
肯定还是要确定最小最大
此时最坏
P3777 [APIO2017] 考拉的游戏
子任务
随便给一个点塞个
子任务
显然一开始放满
由此启发我们缩小范围,且可以知道,同类型的必须放相同的值
在
可以直接去问交互库得证或列出二次函数找单调性即可
子任务
由
同样列出二次函数可知道
然后精细点的二分可做到只三次询问
子任务
发现询问限制大概是
子任务
同样考虑缩减范围,如果我们每次都能将
考虑怎么划分,因为同类型的必须放相同的值,所以考虑给
现在只需要找到合法的
因为
P5473 [NOI2019] I 君的探险 ✯
直接
此时相当于是两两配对
考虑二进制,修改当前这一位所有位上为
一棵树,且父节点编号小于当前节点
整体二分出父亲即可
一条链
同样考虑二进制,分别改了一起修改这一位为
然后对于
无其余限制的树
还是用
然后往队列
如果
如果没有边不操作
正解是神秘随机化
还是考虑
然后为奇数的往左边递归,整体为奇数且在前一半为偶数的往右边递归
最后能求出一些边,
直接这样做不行,要 random_shuffle
后再弄
有结论:rand的一个排列里面有
不会证,很神秘
arc185D Random Walk on Tree ✬
神秘概率期望题/yun
注意到图会成
先考虑
注意有个重要的期望公式:
设
表示期望尝试次数, 表示期望成功概率, 表示成功时的要花费的代价,那么有 ,得到
那么设
则答案就是
考虑
显然调换走的边的顺序不影响答案,因为走的边的总数不变,所以考虑把根走到一棵子树中的所有操作都放在一起
那么现在就同样分成了
考虑从根直走到链底的期望步数,此时根和链底都只能往一个方向走
设
手算出前几项可以发现,
那么答案就是
CF1523E Crypto Lights
设
答案即为
然后有两种方法,一种是直接算
那么有
复杂度
P4448 [AHOI2018初中组] 球球的排列 ✩✯
好久没做组合了,这么经典的
都忘了/xia
首先发现乘积为平方的当且仅当它们每一个质因子的质数的奇偶性都相同,那么就可以划分出一些等价类,每个等价类中的数两两间相乘都是平方数,不同等价类的两个数相乘一定不是平方数
设有
发现题目要求的是等价类内的数也要有序,但是如果有序我们就难以在算方案时做到不重,那么考虑先变成无序的,把
答案就是:
用背包优化一下即可
复杂度
P3236 [HNOI2014] 画框 ✩
最小乘积生成树,点是
每次让
P4155 [SCOI2015] 国旗计划
有个有趣的线性做法
倍增的
CF348D Turtles
容斥
肯定一条路径是
发现路径存在交集的时候,把第一个交集到
板子
起点定为
agc068A Circular Distance ✯✩
恰好肯定不好求,考虑求答案距离
发现
设
此时因为
同属于一个区间的点间显然没有限制,考虑区间之间的点的限制,因为这个限制是相对的,所以我们来考虑
发现选了
这里有个很巧妙的办法,把
太巧妙/se
现在就可以变成这样一个问题:给你
这样问题就边的简单了,枚举10
的形式,留出它们的间隙,那么选点的方案数就是
算简化运算的
?
因为有要求
agc068B 01 Graph Construction ✯◈
蓝色的,但构造题,不会呜呜/ll
考虑一开始
取出同色的所有相邻的点,只要能让这些点间有边,就能满足题意了
发现在
那么我们只需要讲当前需要连边的点对
复杂度
agc068C Ball Redistribution ✬
正着肯定不好做,考虑倒着做
先建图
那么显然如果有某一步使得原先连向
直接做是不好做的,考虑找个充要条件
手摸一下数据后可以发现,对于
再来考虑后面这种情况,发现此时操作
所以直接
复杂度
P3765 总统选举 ✯
数据结构
正常的做法就是用线段树维护摩尔投票和平衡树维护每个值的点,平衡树改成线段树也可以,就是这样空间更大
原本写的是
正常的做法就是线段树+平衡树,线段树+线段树也可以,就是这样空间更大
,小登以为我说的是树套树,又把我了一顿/ll,遂改 没树枝小登,真给我踩了。。。
随机化 ✯
然后牛的是随机化做法,取一个
分块
无所不能的根号分治啊,怎么有人啥都能来分两手啊
设阈值
[AHOI2005] 航线规划
用作的维护边双连通分量的例题啊,提供另一种做法,更简便
给边单独建点,然后夹在其连接的两点之间即可,然后考虑倒着操作,就是加边,如果不连通就
复杂度
CF618G Combining Slimes ✬
考虑最终的序列呈什么样子,肯定会是一些下降段的拼接,而每个下降段的末尾都是
因为显然对于一个序列,满足它当前末尾不是
,然后发现当且仅当你塞一个 再塞一个 ,会使得 及其左侧的部分后面都不会再被操作了
那么现在的大概方向就是想要求出每一段的答案然后拼起来,然后每一段的分隔是用
又可以发现,设序列最大值是
设
对于
当时推到这里迷惑为啥是
不是 ,因为看似这个式子后面的转移保证了后 个的第一个是 的 总的期望不是概率
权值吗,但实际上发现它只是保证了你当前算出来的权值是合法的,本来就应该是合法的概率 合法的权值
这里
要转移到这个,肯定还需要
然后有
关于这些转移:
首先有:只关注最左侧的数,所以后面的数长什么样的不重要
其次,显然我们的这个过程是可
对于
,要想最左侧拼出一个 ,就是先拼出一个 放在最左边,再用剩下的 位拼出一个 ,然后它们能合并成 然后又因为上面所说的下降段的性质,所以如果现在拼出来了一个
,要想最左侧是 ,即不会再出现 和这个 进行合并了,也即在后面的 位的第一个下降段中,不会出现 的数,也即后 个的最左侧那个 即可,又注意到 的定义是 出现过
,那么反向考虑,没出现过的概率也就是最左始终 ,那么转移就得出了
而
同理,
最终的答案就是
复杂度
P3239 [HNOI2015] 亚瑟王 ✯✩
首先,根据期望的线性性,算出每个卡牌被发动的概率,再乘上对应的伤害就可得到总的期望
考虑怎么算出每个卡牌被发动的期望
先来考虑第一张卡牌发动的概率,一下可能会想到枚举它是在第几轮被选择发动的,但是比较麻烦,对于后面的卡牌的计算也没啥可推广性,考虑容斥,即用总概率减去
再来想第二张卡牌,如果第一张一直没选,该情况下,选第二张的概率就是总的概率
减去 一直都没选到的概率
,而这个 一直都没选到的概率
因为一直都没选,所以就根本不用考虑当前这张是比前面某一张先选还是后选,所以此时的概率就是
那么就知道了,如果
剩下的部分就显然了,考虑
答案就是:
复杂度
CF804D Expected diameter of a tree
显然,伪的期望,根号分治即可
复杂度
P3750 [六省联考 2017] 分手是祝愿 ✩✯
怎么像没学过概率与期望一样,看啥都是
首先可以发现,最优策略一定是从大到小,如果当前点状态为
再来考虑随机选点,发现对于当前序列,最优策略是
那么这时就可以考虑
这里我当时想到的是
有个
那么答案就是
复杂度
CF1267G Game Relics ✩✯
首先能注意到
考虑在已有
考虑什么时候会从随机转变成直接买,设已经随机了
复杂度
CF1392H ZS Shuffles Cards ✬✡✩
首先我们可以得到:
考虑
考虑
下面简化的称之为
那么
CF1411G No Game No Life ✯
很典的模型,每个芯片都是一个独立的模型,它们的
然后我当时这里想的就是
可以考虑设
然后高斯消元就行
还有神秘
复杂度
P8868 [NOIP2022] 比赛
解法直接co聊天内容了啊(
分治做法
它分治的做法的话
就是考虑离线,然后把询问挂到区间上
具体就是,跨过了这个区间的中点就挂到区间上
然后如果完全包含了这个区间,这个区间下面的区间就不用挂了
然后询问的话,考虑枚举右端点
设右端点是i
然后大概有两种情况
一种是a和b的最大值都在同一侧
另一种是异侧
然后就先考虑a的最大值在右边的情况
此时可以发现
首先左端点会有一个限制
设它要>=j
然后j-1就满足是边界或者a[j-1]>mid+1~i的最大的a
然后发现会存在一个k
左端点<k的,b的最大值在左侧
=k的在右侧
然后考虑每个i的贡献
对于[j,k)的左端点p,就是bmax[p,mid]*amax[mid+1,i]
[k,mid]的是bmax[mid+1,i]*amax[mid+1,i]
然后就可以线段树维护每个点作为左端点时的贡献
查询答案的话,如果一个区间[l,r]的r=i
那么就能得到[l,mid]中的点贡献
双log
单调栈+扫描线做法
就扫描右端点,然后维护一个a和b的下降的单调栈
设右端点还是i,左端点是j
然后此时j的贡献就是在单调栈上下标>=j的最小的两个a和b的值的乘积
然后考虑加入a[i]和b[i]的影响
还是可以线段树维护
先考虑如果加入进去,栈没有弹出的话
就两个栈都不弹出
此时左端点j的贡献不变,这个就可以打tag
增加一个新的左端点j=i的值
就类似区间修改,++tag,然后维护区间内所有j的此时的贡献,就是a*b的值
然后如果栈有弹出
其实就是区间修改一个后缀
那么线段树维护就行了
单log的
CF2023C C+K+S ✩✯
蓝题都不会了喵/ll,染色
根本没想到喵
因为是强连通图且环长保证为
得出
然后
复杂度
CF2023D Many Games ✬✩
啥
啊,疯狂给 剪枝了属于是
一开始试图找一些结论,未果,考虑背包,能作背包的就
发现题目给了一个神秘的性质,
考虑最优解集合
注意到
那么我们
考虑转移的复杂度,按
考虑
设前
那么有式子
那么转移就是
总复杂度大概
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)