1 月记录
下雨
设 为满足 的最小 ,求最小的满足 的 。
要使得 且 最小,打表发现 的前缀 是连续的,于是我们只用求 的最小 。
考虑一个阶乘进制的东西,,每个数有唯一分解 。
考虑贪心,先手动填满一个前缀,然后在最高位上取,然后删掉多余的,由于多余的和 ,于是只用删掉一个阶乘。
最大是 的,直接预处理二分即可。
沙尘暴(sandstorm)
当我们不会修改 时,类似带权中位数,一定可以取到一个现有的 。
于是路径是几个段,每一个段里钦定一个没有修改的 。
预处理 表示 是段的根,走到 的最小代价。
然后我们考虑通过 处理出关键点之间两两最短路。
那么答案可以由 得出,也可以优化。
宇宙射线
高级奇妙题。
感性理解,每次操作,图像的最高点和最低点极差固定减少一。
也可以看 sol 的妙妙证明。
考虑比较暴力的做法,枚举上下界,枚举终点算。
这样没有前途,考虑枚举极差 ,固定上下界不经过 ,然后起点从 任取,终点从 任取,不过好像还要算起点在 ,终点在 的方案。
同时做反射容斥,每次是 的,预处理前缀和,可以做到 。
后面不会了。
万斯(vance)
随机化或者搜索即可。
梨仙人掌(game)
简单策略题。
夜晚坏人一定随机刀一个好人,而白天其实有固定策略:所有人决定随机淘汰一个人。证明如下:
由于坏人知道所有人的阵营,而好人无法获得任何信息,因此白天的任何信息好人都无法判断真伪。因此好人一定希望随机淘汰一个人。由于好人较多,如果坏人不同意上述规则而选择绑票投某个好人,则好人可以直接把不同意规则的人票出去。因此坏人也不得不同意该规则。
龙神木仙人掌(matrix)
好家伙,知道了 就是对 消元的矩阵乘起来,我要算消元的影响只需要用到 的值!!!
考虑将减法变成乘法,构造:
这样我们对他求逆元的左上角一定是 。
它其实等于:
左右都是初等行列表换,是好做的。
我们已经知道之前 ,我们用他计算对 的影响,然后模拟对 的消元得到中间的逆元。
由转置原理,都是好做的。
未知(unknown)
处理出每个点的取值范围,那么要做的就是每个值连向交的满足取值范围的点,求二分图匹配。
考虑优化建图,可以分块。
散块暴力,整块只有 种不同的连边方式,扫描线即可处理,时间复杂度 。
也可以主席树优化。
对点扫,加点删点都可以在主席树上处理,每次修改都新建点即可,连边就是向区间连边,时间复杂度 。
观光缆车(telpher)
对称一下,可以发现是杨辉三角斜线求和,发现就是斐波那契数列。
然后 sol 的做法就是硬找规律,不好。
考虑列和可以转化为单点,这样矩形可以转化为两条横线,那么我们就是计算这两条横线的斐波那契,发现一条横线是单调的,所以做两次前缀和即可,注意边界的特殊情况。
P5979 [PA2014] Druzyny
简单题,直接分治。
分别对固定左为 ,右为 讨论,硬做就好了。
[ABC386G] Many MST
最小生成树的权值和,可以转化为每种权值有多少个比他大的最小生成树边权求和,那么就是权值 的连通块个数了。
统计一个子集作为连通块的方案数,其实点数相同方案数相同,转成个数做,就是求 个点是连通块的方案数,然后他连向其他点的边都是 的,容斥即可。
P11421 [清华集训 2024] 最大匹配 2
神必题。
显然先每种颜色做栈匹配,剩下来的再做一次栈匹配。
考虑栈匹配未被匹配的右括号一定是前缀最小值,左括号同理。
而修改做的是后缀加减,所以前缀最小值个数最多变化 。
对左右括号分别做,主席树维护每种颜色,以及未匹配的括号,处理好前缀最小值个数,就做完了。
CF2053
E
随便数数就好了。
F
由调整,每一行只填一种颜色,做 dp
,转移时全局取 ,单点加,偷懒上了线段树。
I1
注意到 ,猜测 的最大子段和就是 ,取整个序列即可。
充要条件, 的任意前缀和在 。
首先不能 ,否则后面和 ;其次显然不能 。
而满足 ,则任意子段和 。
考虑 dp
,设 表示 前缀和为 最少添加多少个数。
发现 最多两种数,因为转移是先删掉一段区间,然后将小的值往右平移,其他值就取小的值 。
直接模拟即可。
P9331 [JOISC 2023 Day1] Passport
关键结论:左端点扩展路径和右断电扩展路径一定是一段前缀相同,然后分开各走各的,否则一定可以合并路径不劣。
于是可以先处理出从一个点 ,单独考虑往左往右走的最段路 ,但是会有重复计算的。
设从 开始一直走到 ,然后分开走,答案就是 ,于是新建虚点,连向每个点,权值为 ,做单源最短路,即可处理出每个点的答案。
P7564 [JOISC 2021 Day3] ボディーガード
高妙题。
考虑将时间轴也引入,显然每次一定会一直走,变成每次可以往右上或者右下走,走了 ,贡献为 。
再考虑将 变换为 ,即将平面直角坐标系顺时针旋转 度,放大了 倍,所以将 除 即可。
现在就变成了每次可以向上或者向右走,然后线段都是横的或者竖的,发现这样不仅形态简单了,而且根据题意显然我们最多是走 然后再走回来,这样在新图上的距离就刚好是 ,就不用考虑负数了。
去除 个关键的 坐标,弄成 的网格,预处理 表示当前在 之后的最大收获。
相当于先对平面离散化了一遍,这样一整段要么全被覆盖,要么是空的。
再考虑一般情况的走法,要共同行走尽量多,显然是一直往上,碰到某条线,向右走到某个格点,使用它的 ,往右的同理。
以往上的为例,就是处理处 ,求 坐标下,最大的 ,使用李超树即可,按照 从上往下扫描线。
钓鱼(yoshino)
使用 hall
定理判定合法性,就是 。
对左端点扫描线,维护右端点权值的最小值即可完成判定。
再从前往后确定,发现只需要考虑填完一个数后 位置的合法性,因为不会影响后面的合法性。
于是我们只需找到最小的 ,使得删掉他后最小值合法了,那么我们找到最小值最左的位置,再找这个前缀最小的 即可。
挖野菜(mako)
对 上的端点 考虑,分别向前向后找到最长的合法前后缀,发现其他合法的都是他们的 border
,于是考虑建出 border
树,找到这样 对 ,那么对于一个 合法的条件是子树内存在 。
先对第一棵树考虑,枚举 ,处理 子树所有限制,合法的 就是这些限制组成的虚树大小,使用“按照 dfn
排序后两两距离和”即可。
优化就是 dsu on tree
。
单独行动(murasame)
dag
容斥板子题。
先将 的系数提出。
然后 可以变成 。
使用半在线子集卷积即可。
时间复杂度 。
简单的递归(recursion)
根据质因数分解计算 的方式,发现我们模拟若干次操作后,关于 的影响会完全消失,剩下的质因子的次方项完全是递增的等差数列,即可快速计算。
简单的线性代数(algebra)
妙妙题。
二维差分后行列式不变。
发现这样和矩阵树定理不谋而合 ,相当于加入 的边,问生成树个数。
套用矩阵树定理,可以计算图的每棵生成树边权乘积的和。
先求出 dfs
树,那么有 条非树边,将这些关键点建出虚树,一条树边不选,就有 dis
的方案,用选的东西来贡献,能做到 ,更进阶的方法是广义串并联图。
随机游走(walk)
考虑分块预处理转移矩阵,每段时间散块暴力,整块得到答案可快速知道矩阵,就做完了。
钥匙问题(key)
如果我们将相邻两个没有标记的盒子分成一段,如果一个段有 个 ,那么全都知道。
否则有 个 且这个数不在端点上,那么可以充当传递。
否则记为第三类。
问一个点就是找到他的类,分别往左往右找第一个非 类,判断是否是 类即可。
set
即可维护。
最长公共子序列(lcs)
很能想到上面若干段和下面若干段根据一个字符进行匹配,这样是 的。
不难发现内部讨论后是个三维数点,应该能用树套树做到 。
后面优化似乎很妙,不会。
罗盘(luopan)
打表发现开头是 ,且是一段完整的区间,分析一下就做完了。
树上睡觉(sleep)
妙妙题。
限制是往下跳比往上跳多,拆成下上和下。
问题就是有一个起点一个终点,然后有上下界限制,平移成 的下界和 的上界限制。
这是一个经典问题,只要平移不超过限制,那么在同限制下, 的答案就是 。
这个调整和某道 qoj
的题差不多。
然后显然给出的是一个长链剖分,直接考虑做合并。
长链顶加入一个点,往下的共线好算,轻链并上来就要使用限制为这条长链长度的 dp
数组。
还剩下从一个点往上跳的,会跳到 条长链上,使用对应的 dp
数组即可。
这些 dp
数组都可以一开始预处理。
IMAWANOKIWA(popc)
结论可以打表证明。
接下来就是贪心删除判断答案会不会变大,就是找是否恰好有一个 ,使用链表,容易 维护邻域,存下 个数以及 个数即可。
计数部分不会。
猪国杀(game)
超级妙的题。
假设操作序列为 ,否则先操作一个。
显然数少的那个颜色一定全被消完。
下面证明关键结论:操作顺序任意,每个 找顺时针最近的 ,最后得出来的形态一致。
考虑先将 的连续段缩起来,这样每个 可以选择打一枪,往后打到一个 ,相邻的 ,取最小值时刻,这样就会将一个连续段缩起来,由每个段的被操作次数可以还原出原来段内每个点剩下的值。
草,想起来了再写。
基础想象练习题(fantasy)
还在思考细节。
作反演差分,将极长连续段变为只需统计任意连续段的思想很妙。
死亡搁浅(ds)
很妙的!
考虑预处理前后缀 MST
,而加入边只会删除原 MST
上两个点路径最大边权边,而加入边的端点数是 的,所以我们在原 MST
上建出这些点的虚树,树边为路径最大边权边,那么剩下的边在下一轮不会考虑到,特殊处理,即可保证剩下的边在之后永远不会被考虑到,于是只需存下虚树边以及不会考虑到的边的边权和即可,而处理出新的 MST
的过程直接拿这些边做 kruskal
即可,处理完后再对新的关键点求出虚树即可。
QOJ9676
CF2055E
关于一系列数列求和问题
有关定义:
例题 :。
上述就是指数函数的运算,但是幂函数却不能这么求,考虑定义下降幂。
。
终极
boss
:。
CF1746F
随机映射是可以的。
也可以考虑随机带权 ,考虑一种数 ,且 ,那么 ,那么这样一种数会改变奇偶性,故正确率为 , 更大的情况概率更大。
NOI2013 向量内积
先考虑 ,如果不存在合法的对,那么 。
我们依旧为每个向量随机带权 ,对所有 计算 与所有权为 的向量的和的内积,同理内积为 的会改变奇偶性,正确率为 。
考虑内积的平方为 。
拆开内积平方的式子,可以发现,可以转化为长度为 的向量内积的 问题。
一道题
区间翻转,查询区间子集最大异或和。
随机 个 权值序列。
将每个序列当前区间的异或和加入线性基,假装这个线性基是原区间的线性基即可。
证明不懂,大概需要 个序列就行了。
THUPC2019 找树
由于值域小,考虑直接计数。
使用矩阵树定理,计算 。
其中设 为 , 为 的边权。
表示多项式做题目给定的运算。
而题目给的这种运算竟然有 FWT 变换!不过不太会,先咕咕了。
变换完后每一位独立,拆开求行列式即可。
一般图最大匹配
设计矩阵 :
对于 ,则 。
结论: 等价于图存在完美匹配。
考虑定义,。
拎出置换环,如果有奇环,反转后,刚好抵消。
偶环,反转后,不抵消,考虑偶环,每个环都存在匹配,而一种匹配两两成环也合法统计。
结论:最大匹配为 。
还有一种做法是随机染色成二分图求最大匹配。
QOJ8830
还不会。
CF1641D
将每个值随机映射到 ,跑高维前缀和。
正确概率大约为 。
THUSH2017 巧克力
将 矩阵映射到 ,正确率大约为 。
用斯坦纳树 求最小连通块,然后二分求解最大化中位数问题。
有向图哈密顿路
给每个点赋一个 维向量,每条边赋边权,给一条路径的权值定义为边权成家乘上 。
dp
求解以每个点为终点的路径权值和即可,中间需要 记录 的占位情况。
时间复杂度 。
QOJ4809
考虑边双内存在经过最大权边和最小权边的环,然后网络流求解方案即可。
P8456 地地铁铁
写过了。
QOJ7682
大概就是线段树维护区间点的圆方树。
然后使用删一度点,缩二度点方法压缩信息。
后面没听懂。
耳分解与开耳分解
有向图可耳分解当且仅当强联通。
无向图可耳分解当且仅当边双连通。
无向图可开耳分解当且仅当点双连通。
P5776/QOJ3301
考虑耳分解反向构造边双。
定义 表示包含 的边双最小边权和, 表示当前经过 中的点,在耳 ,钦定的中点为 。
时间复杂度 。
双极定向
给定无向图与 ,存在双极定向当且仅当连接 后点双连通。
- 构造点排列 ,使得 ,且任意前缀与后缀的导出子图连通。
- 给图所有边定向得到
dag
,使得 入度为 , 出度为 ,其他点入出度均不为 。
方法:tarjan
按照点双方法求出每个点的 ,在预处理时将 加入 的列表中,注意 路径上的点不加入。
提取 的路径,将他们依次染黑,并且递归染黑他们的列表。
注意有染黑顺序按照深度从大到小的限制,由于预处理已经维护这个顺序,故无需考虑。
IOI2019 景点划分
容易发现,至多一个点双有 两种颜色。
建圆方树,钦定一个点双有两种颜色。
以他为根,若最大子树 ,无解。
若最大子树 ,则在改子树中选择 ,其余选 。
否则,所有子树大小 ,对点双做双极定向,取一个前缀为 ,一个后缀为 ,一个个加入前缀圆点对应的子树,某次大小和从 变成 时,一定满足 ,则后缀 。
切边等价集合
我们称两条边切边等价当且仅当在任意简单环中,这两条边要么同时出现要么同时不出现。
求解考虑 dfs
树上非树边赋随机权值,树边权值为跨过它的非树边权值。
则权值为 的边为割边。
任意异或和为 的边集为图的割集。注意实际实现时,只能处理割集较小的情况。
P6914 WF2015 Tours
玩玩就知道答案就是 .
QOJ1351
二分图就是不存在奇环,只需考虑给奇环赋值。
则所有边异或和非 等价于非二分图。
找到奇环权值异或和,一条边的方案直接统计即可。
两条边就是找异或和为它的方案,开桶统计即可。
边三连通分量
两个 在同一个边三连通分量的充要条件是不能割两条边使得 不连通。
直接讨论:
- 树边权值为 。
- 存在树边与非树边权值相等。
- 存在两条树边权值相等。
考虑异或哈希方法区分边三连通分量,情况一二就是子树异或,情况三就是一上一下打两个子树异或,这样就可以区分出中间的连通块了。
对于情况三,dfs
回溯时处理相邻的权值相等的树边即可。
CF1648F
模拟赛题。
PA2020 Trzy drogi
P7349 有向图可达性问题
考虑每 个分一块做一次传递闭包,每个点存一个 ull
,表示与当前 个点的可达性,时间复杂度 ,空间复杂度 。
那么我们处理出来了这样一张表。
其中列表示起点,行表示终点,那么每次询问相当于询问一个左下角权值和。
先考虑蓝色部分,容易从下往上处理。
橙色部分就是反过来做,每个点存一个 ull
,表示当前 个点到这个点的可达性。
对于绿色部分,每次 处理即可。
时间复杂度 ,空间线性,可以通过。
SNOI2020 生成树
广义串并联图经典题了。
UOJ138
直接给非树边赋值 。
这样只有不超过 种边权,证明大概考虑非树边构成的虚树上一条边的权值都相同的,可以缩起来。
然后使用记忆化搜索,每次新增一种编号就加入到线性基里判断是否合法,卡不掉。
QOJ9877
咕咕咕。
完全有向多分图
缩点,按照正拓扑序排序,设为 ,则:
- 若 ,设 为最大的 使得 ,且这些点都在同一部分,则 互不可达,且全部可达 。
- 否则 可达 。
可以进行拓扑序计数。
CF1806F2 GCD Master
相当于将所有数分成 个集合,最大化每个集合的 的和。
若 ,则 。
若有两个满足 的集合 ,则 单独一组,其他一组,不劣,
证明:设 ,则选择 为一组,变化为 。
故最多一组满足至少两种数。
我们枚举这样的组中的数的个数,那么还需考虑合并相等元素的共线,即为每种元素去掉一个后的前若干大。
于是问题转化为在元素互不相等的集合中选择 个数,最小化 。
将元素排序得到 ,若 ,则 ,将 换成 不劣。
证明:。
因此 形如 。
枚举 ,只有 种 。
CEOI2014 The Wall
考虑 到每个关键点左上角的最短路径,它一定被回路包含。
证明:否则,存在最短路径的一段区间在回路外面,则最短路径的子区间还是最短路径,调整。
显然任意一条不跨过这些路径的回路都会经过关键点。
那么拆点,删掉会跨过这些路径的边,求最小环即可。
具体考虑起点 ,终点 的最短路即可。
IOI2019 折线
直观想法,螺旋往里绕,但是斜线会炸。
考虑维护三个序列,一个螺旋,一个左上到右下,一个左下到右上。
尝试螺旋,发现不合法时一定满足是剩下点的一个角,一定可以放到另外两种上。
每种序列段数严格等于点数加一,是合法构造。
IOI2024 象形文字序列
如果保证有解。
对于一种字符,将他出现次数较少一侧标记为关键位置。
相当于在 中相等元素匹配,使得每个关键位置在匹配中,且匹配不交。
考虑 中第一个关键位置。
若 则可以直接匹配。
若 中出现过 ,则 可匹配,另一侧同理。
只有一侧可匹配时直接匹配。
若两者均可匹配,则需要进一步分析决策。
重新定义:若 中 的出现次数 中 的出现次数,则 可匹配。另一侧同理。
若在新定义下两者均可匹配,则考虑 和 ,它们均为 的公共子序列,但不可能同时是 的子序列,玩一玩就理解了。
直接递归求解即可。
接下来需要判断求出的 是否是最全公共子序列。
尝试构造一个 且不为 的子序列。
依次加入 的每一个字符,维护当前在 中的匹配位置 ,设 中的字符对应 中的位置为 ,令 对应在 的匹配为 。
显然有 。
若某个时刻有 ,则一定可以构造出 。
因此只需考虑 或 的情况。
情况 :,假设下一个匹配的是 中的一个关键字符 ,设 ,由于在 中, 的位置上不存在 ,且冗余位置不可能存在 ,那么 成立,则情况 可能生成情况 ,也可能转到情况 。
情况 :不妨设 ,接下来选择某个字符 ,对于 ,如果在 部分都不存在字符 ,那么当前情况会退化为情况 ,否则有 ,所以 ,后面不讨论了。
记 表示 时 的最小值, 表示 时 的最小值。
由上知道 不存在互相转移的情况,只需判断能否通过增加一步操作达到不合法情况即可。
ucup3 stage21 G
考虑度数和最小的点 ,所有点度数和为 ,则 。
若 ,那么都是叶子,直接删除递归子问题。
否则,令 ,且 中 在 路径上。
在 中删除 ,在 中加入 递归子问题。
在子问题中,必然有交换 ,将这一步改为交换 ,交换 。
合法,太妙了!
ucup3 stage20 I
将每个物品重量较少 ,则每个物品重量在 ,总重量在 。
令选出了 ,则必然存在 的一种排列方式满足所有前缀和在 。
那么倍增多项式幂即可,每次只保留 的项。
ucup3 stage7 C
考虑钦定每种物品在哪个商店买到,那么一个商店的代价就是所有物品排序后奇数位置和。
先钦定每种物品放在价格小的商店中。
设两种物品代价 且 ,显然不如不换。
那么排除掉了包含和相交的情况,那么所有更换的线段不相交。
令 表示考虑后 个点,两个商店物品奇偶性,最小代价。
转移考虑是否更换当前物品,需要支持快速计算一段区间的代价,计算方式相当于矩阵乘法,线段树就行了。
ucup3 stage13 N
记录每一段 的个数 。
操作为选择 ,合并为 。
后面还没懂。
ucup2 semifinals H
ucuo1 stage0 L
割集当且仅当线性相关。
令经过树边 的非树边集合为 ,那么我们只需维护 的等价类。
令 表示加入的第 条边是否包含 ,那么 在 时刻处于同一等价类当且仅当 。
操作过程相当于分裂,考虑倒过来变成合并,将 按照字典序排序,相当于 trie
的 dfs
序,在 时刻将 合并即可。
区间 lcp=min 相邻 lcp
。
AGC068E
AGC055F
UOJ25C
UOJ NOI ROUND7 D1 C
ROI2017 学习轨迹
经典题了。
EGOI2024 Garden Decorations
zak 的二进制警报器
传统警报器只能做到 。
而二进制警报器能做到 。
对于一组警报点 ,维护一个阈值 ,只要 经过 的倍数时就报警(例如 ,我们称他经过了 )。
报警后进行检查,如果当前的 能让所有 在不报警的前提下总和超过 ,那么 。
具体实现时判断 ,就 ,不用特别精细。
对于某个时刻的 ,满足 是 的,当一个元素报警两次后,必然至少增加了 ,当前的 对应的报警次数总和不超过 ,否则就大概满足 了。
故每组报警点总报警次数为 。
每次修改会报警的 一定是一段后缀,拿出后缀 的所有报警器(用 vector
维护即可),每组报警器在 rebuild
时,预处理 表示 再减去每个 不报警情况下的空间。
而不报警的情况下 是不变的。
太牛牛了。
thupc2024初赛 套娃 对极小 mex 区间的处理
本质不同极小 mex 区间只有 个。
处理出所有 区间。
对于 区间集合求出极小区间。
对于 区间集合中的每个区间,分别找到左右最近的 ,形成两个区间,求出他们的 mex 为 ,加入到 区间集合即可。
很妙的。
CF2056F2
观察 的组合数连乘形式,发现式子为奇数当且仅当 将 的二进制 位划分为若干个集合。
在这样的形态下,含有二进制最高位的 一定是绝对众数,也就是中位数,同时也是最大值,枚举 ,则方案数为 。
先枚举 ,我们需要解决快速求 的值,组合意义是将 个不同元素划分到 个无序集合,钦定每个集合的代表元是其中编号最小元素,那么一个未钦定元素,分配的方案数就是之前代表元个数,总方案书就是乘积。
那么我们要求,每个未钦定元素都要满足之前有奇数个代表元,相当于第 个代表元必须与第 个相邻,若 为奇数,因为偶数的时候最后一个代表元必须在 ,就能转化为奇数的情况了。
相当于第一个代表元在 ,在剩下 个位置放 个元素,要求 和 相邻,则想捆绑起来,于是任意情况下,方案数为 。
然后我们要求 为 的超集且 ,则我们搜索 的二进制位,当当前位可以填 时,我们添加 nb 剪枝(超级像省选 2024 D1T2!!):若后缀全部填 都满足 ,则我们直接加速:
- 若后缀 全是 ,返回 。
- 若后缀只有一个位置为 ,返回这个 的二次方。
- 否则,返回 ,因为所有数抵消,这个和前缀异或和与模 余数相关很像。
P11427 [清华集训 2024] 绝顶之战
P11524 [THUPC2025 初赛] 背向而行
P11420 [清华集训 2024] 乘积的期望
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18648704
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!