- 博客(89)
- 收藏
- 关注
原创 水题记录2.3
本文摘要介绍了多个算法竞赛题目的解法要点: CF822E Liar:使用动态规划,定义状态$f[i,j]$表示字符串$s$前$i$位切$j$段能匹配$t$的前多少位,通过转移方程求解。 luoguP14139:通过数学推导将原式拆解,转化为求$n$的平方因子问题,并给出了$O(\sqrt{n})$的解法。 CF912D Fishes:利用优先队列维护捕鱼次数前$k$大的网格点,通过行列贡献乘积计算最优解。 CF1810E Monsters:采用贪心策略,从战斗力为0的点开始扩展,每个点最多被遍历$O(\lo
2025-10-17 20:22:24
712
原创 水题记录2.2
四道Codeforces题目:CF2013F1:树上博弈,Alice从1出发,Bob从路径p_j出发,通过预处理路径节点的“离径最远步数”,结合ST表维护区间最大值,模拟博弈过程判断胜负。CF2110E:构造优美不单调音乐序列,建二分图求欧拉路径,需特判连通性与奇度点数量。CF1221F:选正方形最大化收益,将点转为线段,用扫描线+线段树维护区间权值和与负坐标贡献。CF1592D:交互题,找树上边权GCD最大的边,利用欧拉序二分查询连通块,12次内定位最优边。
2025-09-28 16:22:47
752
原创 水题记录2.1
该文章讨论了四道编程竞赛题目,涉及贪心、拓扑排序、分块和人类智慧解法。第一题(ARC200C)通过分析区间关系建立有向图,用拓扑排序求最小字典序。第二题(CF1623E)利用中序遍历特性,贪心决定节点复制以优化字典序。第三题(CF1830E)通过观察操作性质,得出答案即为元素位置差之和与逆序对数之差,并用分块维护。第四题(P5309)采用根号分治,对大步长暴力更新,小步长维护前缀和,以实现高效区间修改和查询。这些解法综合运用了贪心、图论、分块和离线技巧,体现了对问题特征的深入分析和高效算法的设计。
2025-09-22 15:45:50
752
原创 水题记录2
文章解析了四道题目:CF1521D:贪心调整树结构,通过切断多余边使树变为链,记录删除与添加的边,输出方案。P12576:二分答案,将点分类,博弈论SG函数判定先手胜负,复杂度O(n log V)。P12445:组合计数,分三类点容斥,DP计算方案数,处理k=0和k≥2情况,复杂度O(n²)。CF1511G:倍增预处理区间异或和与个数,查询时拆位计算nim游戏异或和,判断胜负。
2025-09-17 20:46:04
879
原创 水题记录1.9
文章解析了四道CF题目:CF2133F:通过排序苦力怕的爆炸范围,利用线段树优化DP转移,记录前驱路径并用拓扑排序输出方案。CF1699E:通过动态规划及调和级数更新,用桶维护最大值的最小值,优化至O(m log m)。CF1354F:贪心选择召唤顺序,DP计算最大战力,记录路径输出方案。CF1039D:根号分治,小k直接贪心,大k二分答案段,复杂度O(n√n log n)。各题均涉及算法优化与路径记录。
2025-09-17 19:43:41
1040
原创 水题记录1.8
本文解析了四道算法竞赛题的解法:《P14011 [POCamp 2023] 珿求 / bootfall》使用动态规划预处理攻防状态以决策胜负;《P14013 [POCamp 2023] 送钱 / The Generous Traveler》结合树链剖分与线段树二分处理路径取模;《P11340 [COI 2019] TENIS》通过线段树维护排名区间判断获胜可能;《CF1554E You》基于树上删点序列的GCD性质,利用因数枚举与贪心求解方案数。四题均体现数据结构与数学思维的综合应用。
2025-09-10 20:16:05
760
原创 水题记录1.7
本文摘要了四道算法题的解题思路与代码实现: Luogu P10207:通过区间DP解决球收集问题,利用前缀后缀优化,发现有效点数超过1000时无解。 CF703E:采用动态规划处理乘积为特定值的子集问题,通过预处理因数优化状态转移,注意特判k=1的情况。 CF1497D:将问题转化为图论模型,按路径长度递增更新状态,利用动态规划求解最大得分。 CF1593G:分析括号匹配的性质,通过统计奇偶位置上的括号数量差来计算最小修改代价。 每道题均给出了关键思路和核心代码片段,展示了如何通过算法优化和性质分析解决复杂
2025-09-09 15:14:15
1028
原创 题解 洛谷P13778 「o.OI R2」=+#-
本文提出了一种抽象方法来解决特定问题。通过分析折线图和值域联通块的性质,发现关键规律:k只能向左移动且不能跨过段向右跳。作者采用从右向左枚举的方法,判断k能否停在当前区间前一个区间的右端点右侧。通过计算红色区间的可用+1数量,确定k的最终位置,并处理特殊情况(如+1比-1多时需两两抵消)。最终使用并查集维护连通性,结合奇偶性判断给出解决方案。代码实现了上述逻辑,处理了边界情况并输出结果。
2025-09-04 20:16:40
885
原创 水题记录 1.6
本文摘要整理了多个编程竞赛问题的解法思路: CF1887E:将问题转化为二分图模型,通过寻找偶环并分析环长特性来解决问题,最终通过互动式查询确定答案。 CF453B:利用状态压缩DP,预处理质数集合,通过状态转移寻找满足条件的最小差值序列。 CF1783D:采用动态规划方法处理序列变换问题,通过维护当前数值状态和转移条件来统计方案数。 CF279D:使用位运算优化的DP,通过状态转移和滚动数组技巧寻找满足条件的最小操作数。 CF1368E:通过节点度数标记和删除策略,确保在删除部分节点后满足特定条件。 P6
2025-09-04 19:00:55
975
原创 笛卡尔树上的枚举短边
本文提出了一种基于笛卡尔树的高效区间枚举方法。通过分析节点所属区间的最优枚举策略,证明了在最坏和平均情况下时间复杂度均为O(n log n)。文章以两个习题为例展示了该方法的应用:对于Codechef Locked Safe问题,利用笛卡尔树和ST表实现了O(n log²n)的解法;对于Luogu4755问题,则结合主席树实现了O(n log n)的解法。这些方法在保证正确性的同时显著提高了效率,特别适用于处理极值相关问题。
2025-08-07 18:02:55
962
原创 扩展欧拉定理习题
本文介绍了扩展欧拉定理及其在编程竞赛中的应用。主要内容包括: 扩展欧拉定理的数学表述,当a,m∈Z时,a^b mod m的计算方法根据b与φ(m)的大小关系有所不同。 通过CF17D和CF615D两个例题展示了扩展欧拉定理的实际应用,包括: CF17D:计算(b-1)*b^(n-1) mod c的特殊情况处理 CF615D:计算一个数所有因数的乘积,分析质因子的贡献 介绍了扩展欧拉定理的两个应用方向: 与数据结构结合处理区间欧拉函数操作 与递归结合计算幂塔模数,如P4139和CF906D等题目 强调了欧拉函
2025-08-06 20:04:44
929
原创 扩展欧拉定理以及练习题
扩展欧拉定理是欧拉定理的推广形式,适用于模数为任意正整数的情况。定理根据gcd(a,m)的不同情况分为三种计算方式:当a与m互质时简化为欧拉定理;当不互质且指数较小直接计算;当不互质且指数较大时需加上φ(m)项。文章通过例题展示了如何应用该定理计算大指数模运算(如7^1000 mod 10),并提供了模板题代码实现。代码采用边读入边取模的方式处理超大指数,同时说明了可以优化欧拉函数的批量计算。最后推荐了多道相关练习题(洛谷P4139、CF906D等),为深入学习该定理提供实践资源。
2025-08-05 15:38:30
1129
原创 整数拆分方案数的非DP根号递推
本文基于五边形数定理推导了整数分拆函数p(n)的递推公式。首先介绍了整数分拆的定义和生成函数表达式,然后利用欧拉的五边形数定理建立了生成函数的倒数关系。通过展开卷积运算,得到了p(n)的递推关系式,其中包含广义五边形数项。文章给出了递推公式的简化形式,并通过p(5)的计算示例说明其应用。最后提供了基于该递推式的C++实现代码,时间复杂度为O(n√n),并讨论了在模运算和扩展欧拉定理下的应用。该方法避免了暴力枚举,适合大数计算。
2025-08-05 09:48:48
874
原创 DP,博弈论 水题记录1.5
本文摘要了两道Codeforces高难度题目(CF1439D和CF1991H)的解法。 CF1439D(3100分):题目要求计算n个座位安排m个人的方案数及权值和。通过动态规划,先处理弱化版n=m的情况,定义g[i][0/1]表示i个位置i人的方案数及权值和。然后扩展为一般情况f[i,j][0/1],考虑极长连续段的转移。最终复杂度为O(n^2),通过组合数和模运算实现。 CF1991H(3300分):博弈论题目,分析石子堆的必胜/必败状态。定义必胜数、必败数和"好数",通过奇偶性
2025-08-04 20:51:55
1091
原创 DP水题记录1.4
本文讨论了两个动态规划问题:CF888F和CF1799G。 对于CF888F(2500分),提出了区间DP解法,通过状态f[l][r][0/1]表示区间[l,r]连成树时l和r是否直接相连的方案数,避免了重复计算。转移时考虑两种情况,并给出了代码实现。 对于CF1799G(2600分),采用容斥原理,定义f[i][j]表示前i组中钦定j张票不合法的方案数。通过预处理g数组计算组内方案,最终利用容斥公式求得答案。代码中包含初始化g数组和求解过程。 两题均通过加强状态定义和转移条件来避免重复计算,展示了DP问题
2025-08-04 01:00:00
557
原创 DP水题记录1.3
本文介绍了通过优化状态设计来降低动态规划时空复杂度的两个例题。第一题利用Frobenius数理论压缩跳跃距离,将O(LT)的复杂度优化;第二题通过去除冗余的"当前位置"维度,将五维状态简化为四维,有效降低了空间消耗。两个案例都展示了在保证算法正确性的前提下,通过合理分析问题特性来优化状态设计的技巧,从而提升动态规划算法的效率。
2025-08-03 09:01:59
313
原创 博弈论详解
博弈论是研究策略性决策的数学理论,主要包括公平组合游戏、Nim游戏和SG函数等核心概念。公平组合游戏具有确定性的规则和胜负条件,可以转化为有向图游戏进行分析。Nim游戏通过异或运算判断必胜策略,当各堆石子异或结果为零时先手必败。SG函数用于量化游戏状态,通过mex运算和SG定理(异或性质)分析复杂游戏组合。通过例题如切割矩形和Euclid游戏,展示了如何应用SG函数解决实际问题。掌握这些理论能够有效分析和解决多种博弈问题。
2025-08-02 15:47:52
852
原创 DP水题记录1.2
本文摘要了三道Codeforces动态规划相关题目: CF1301E:二维网格中寻找特定Logo图案的最大面积,使用二维前缀和预处理,暴力查询矩形区域是否存在合法Logo,复杂度O(n³+qn)。 CF2045H:字符串划分问题,通过倒序DP和最长公共前缀(LSP)优化转移,利用二维数组记录状态和转移路径,最终输出最大划分方案。 CF2057E1:图中路径第k大边权的最小值问题,通过Floyd预处理最短路,按边权排序后逐步更新状态,结合二分查找确定答案。 三题均涉及动态规划思想,分别展示了网格处理、字符串优
2025-07-11 09:10:58
267
原创 DP水题记录1.1
本文探讨了三道动态规划相关的Codeforces题目: CF2034F1(2500分):将宝石装箱问题转化为网格路径问题,通过动态规划计算所有路径价值和的期望值,使用容斥处理关键点转移。 CF2034F2(2800分):在F1基础上优化,通过拆解贡献公式并重新设计状态转移,将时间复杂度从O(k^3)降至更高效的方式。 CF1928E(2300分):将序列构造问题转化为等差序列组合问题,通过预处理和动态规划在O(n√n)时间内找到最优解。 三题均展示了如何通过巧妙的模型转化和动态规划技术解决看似复杂的问题,体
2025-07-10 15:26:25
974
原创 SAM详解3.2(关于2和3的题)
本文主要介绍了SAM(后缀自动机)在字符串处理中的应用,特别是用于解决最长公共子串问题。首先,文章通过Luogu P6640题为例,展示了如何利用SAM处理字符串匹配问题,并通过拆括号和二分优化查询效率。接着,文章讨论了CF653F题,展示了如何利用SAM和线段树结合处理本质不同的合法括号子串问题,并通过维护后缀和的方式实现高效的区间查询。文章还提供了详细的代码实现,帮助读者理解SAM的实际应用和优化技巧。
2025-05-10 15:33:41
768
原创 SAM详解3.1(关于2和3的习题)
本文介绍了如何使用后缀自动机(SAM)解决两个字符串问题。第一个问题是给定一个字符串和整数k,求出现k次的子串长度的最大出现次数。通过构建SAM的parent tree,并使用dfs和差分维护,可以高效解决该问题。第二个问题是给定一个字符串,求每个长度i的子串在字符串中的最大出现次数。同样利用SAM的parent tree和线段树进行区间取最大值操作,最终得到每个长度的最大出现次数。文章提供了详细的代码实现,并强调了SAM在处理字符串匹配问题中的高效性。
2025-05-09 21:43:50
935
原创 SAM详解3(SAM与AC自动机的相似性,SAM处理字符串匹配)
本文介绍了后缀自动机(SAM)及其在字符串匹配中的应用。首先,文章简要回顾了AC自动机的概念,并将其与SAM进行类比,指出SAM可以理解为将某个字符串的所有子串建立AC自动机。接着,文章通过例题详细讲解了SAM在解决最长公共子串问题中的应用,包括单串和多串的最长公共子串问题,并提供了相应的代码实现。最后,文章讨论了本质不同循环同构匹配问题,并给出了解决思路和代码参考。通过这些内容,读者可以更好地理解SAM的原理及其在字符串处理中的实际应用。
2025-05-09 15:19:19
1683
原创 SAM详解2.1(好题1)
所以,从某个节点(不一定要求是源点)出发的路径组成的串,都是互不相同的,如果相同的话,就违背了上述性质。最后说一点,统计路径条数时判断是否到达过要放在函数外面,即我的子节点到达过了,我也要算上它的贡献。注意需要分别处理两种情况,一种相同的字串只算一次,一种算多次。而且有一个显然的性质:SAM 中任意两个节点的表示集合没有交。于是我们可以在这个 DAG 上统计路径条数,也就是子串的数量。对于不同位置的相同子串算多次的情况,我们可以让。,那么答案就在这个转移边后的子DAG中。中已经讲过了,不会的可以去看。
2025-05-08 15:33:39
980
原创 二项式反演及其代数证明
第三个等号时交换求和顺序,是各种反演的常见技巧。,系数也和原来一样。所以两个式子显然等价。第四个等号即为上边组合数的性质,然后把。具体讲一下,第二个等号把。在看等号后的式子,每个。第五个等号是二项式定理。相关的项提到前面去。
2025-05-07 17:22:06
864
原创 SAM详解2(初级应用)
再在 parent tree 上做树形DP,我们惊讶的发现刚好符合标准。我们还是举这个串和其 parent tree 为例。然后对于没有新建节点的情况,我们只是加入了一条。在 parent tree 上,每个节点的。的 SAM 上跑匹配时,我们可以得到对于。证明也很简单,因为无法在这些前缀前面加东西。的串的长度乘上其出现次数的最大值。变化的时候,维护这个总和就好了。求本质不同子串出现次数的平方和。集合不同,即代表的子串不同。所表示的状态)不能匹配。求本质不同非空子串个数。的子串出现的最长后缀。
2025-05-06 18:35:11
1319
原创 SAM详解1
过于神秘的字符串,但是被同学怂恿,说学会 SAM 就学会了所有字符串算法,心动了过来学,果不其然被创飞了。但研究?天,故余虽愚,终有所获。由于作者学艺不精,文中可能会有疏漏,如发现错误欢迎指出,那么我们开始旅途吧。OI-WikiAlex_Wei的博客command_block的博客ZTer的博客我们定义一个子串的endposendpos是它在原串中结束位置的集合。例如原串为ababcababc,则endposab24endposc5。
2025-05-06 07:00:00
1342
原创 【题解】CF196D (哈希)
洛谷codeforces题意:给定长度为nnn的小写字母串sss和正整数ddd。定义一个串是好的当且仅当他没有长度大于等于ddd的回文子串。请你求出长度为nnn并且字典序比sss严格大的好串里,字典序最小的那个。没有输出Impossible。
2025-05-04 10:35:27
697
原创 0基础FWT详解2(巩固)
个州包含的所有城市组成的集合。定义一条道路是一个州的内部道路,当且仅当这条道路的两个端点城市都在这个州内。如果一个州内部存在一条起点终点相同,不经过任何不属于这个州的城市,且经过这个州的所有内部道路都恰好一次并且经过这个州的所有城市至少一次的路径(路径长度可以为。座城市划分成若干个州,每个州由至少一个城市组成,每个城市在恰好一个州内。发现和第一题一样,那么一样的做法就行,但需要注意的是。的州,所有合法的划分方案的满意度之和是多少。定义一个划分的满意度为所有州的满意度的乘积。假设小 S 将这些城市划分成了。
2025-04-30 20:35:01
717
原创 【题解】CF2096F
的暴力,对于每组询问逐条便利语句,是。,可以直接暴力的搞一个线段树维护。注意到题目不强制在线,只要求出。单调不降,则可以用双指针维护。赋值完后将剩下的空位赋值为。语句前面最前的语句使得语句。的询问的左端点的最大值。,这样单次修改的均摊复杂度是。的维护可以开一颗线段树。可以线段树上二分维护。最终我们开两个线段树和。类型的语句是否合法。
2025-04-28 15:26:19
585
原创 线段树合并与线段树分裂
线段树合并是指建立一棵新的线段树,这棵线段树的每个节点都是两棵原线段树对应节点合并后的结果。线段树分裂实质上是线段树合并的逆过程。线段树分裂只适用于有序的序列,无序的序列是没有意义的,常用在动态开点的权值线段树。线段树分裂与线段树合并密不可分,一般来说没有只分裂不合并的题。的救灾粮,问所有操作结束后每个节点类型最多的救灾粮是那种。一棵树,点有点权,问每个节点的子树内有多少节点点权比它大。从这棵树的根节点开始递归分裂,当节点不存在时,递归结束。显然,对于两颗满的线段树,合并操作的复杂度是。
2025-04-27 10:28:06
864
原创 0基础FWT详解1
操作,即这个块的前半部分更新为前半部分和后半部分的和,后半部分更新为前半部分和后半部分的差。接下来是逆变换,可以和正变换一样做,但是是后半部分减去前半部分。对于逆变换也显然,这里不再推了,留给读者证明。一样做,但是换成后半部分向前半部分做贡献。的块,将每个块的前半部分累加到后半部分。因为初学,常数肯能稍大。可以用高维前缀和做,但这里不讲这个做法。有了之前的代码,发现正逆变换可以合并。根据前面的论证思路证得,这是对的。的递归构造相同,所以肯定是对的。按照之前的思路,容易得到应该是。两种答案,那么根据最初的。
2025-04-27 09:38:34
1054
原创 【数据结构】李超线段树
我们用这条线段递归更新对应子树,用另一条线段作为懒标记更新整个区间,这就保证了递归下传的复杂度。不合法的点对就是原来的路径不经过环的,因为它们想走第二条路径就会经过环一次,会有点重复走。其中肯定有一个子区间被左区间或右区间完全包含,也就是说,在两条线段中,肯定有一条线段,只可能成为左区间的答案,或者只可能成为右区间的答案。如图,加入黄色线段后,只有红色节点的标记被更新,而绿色节点的标记还未被改变。这里我的写法是给李超线段树上的每个节点打个时间标记,记录它的线段是哪个时间段的,这样不用考虑删除的问题。
2025-04-23 14:37:01
1455
原创 【笛卡尔树】
笛卡尔树是一种二叉树,每一个节点由一个键值二元组kw(k,w)kw构成。要求kkk满足二叉搜索树的性质,而www满足堆的性质。如果笛卡尔树的kwk,wkw键值确定,且kkk互不相同,www也互不相同,那么这棵笛卡尔树的结构是唯一的。通俗的讲,笛卡尔树是一个二叉树,中序遍历是原序列,同时满足堆性质。
2025-02-13 22:02:50
1152
原创 【平面图中欧拉公式】
平面图的一个重要性质是它可以将平面划分为多个区域,这些区域称为面(Face)。其中一个面是无限大的,称为外表面(Outer Face),其余的面是有限的,称为内表面(Inner Face)。即是原图本就存在一个没被删去的点,使得它上下左右都被删(边界也可以)。因为一定存在某个点,使得删去周围不超过两个点使得其与其上下左右不连通。换句话说,平面图可以在平面上画出,且其边不会相互交叉。,用并查集维护,因为删一个点最多影响四个面。删掉了一个点,四条边,合并了四个面。显然,再一个点都没删的情况下,
2025-01-22 11:14:25
1261
原创 【题解】AT_dp_t Permutation & UVA1650 数字串 Number String & AT_abc209_f [ABC209F] Deforestation
我们不需要考虑具体顺序,只需要先后,那就跟第一题一样了。注意如果两数相等,那就没有先后关系,和第二题一样。我们发现如果关系不确定那直接两种合并一起即可。证明显然,因为我们只需要考虑大小关系。根据性质可证,因为我们只考虑大小关系。个数,直接暴力枚举它是啥。但是反过来,你却发现一共有。求满足这样的性质的排列。我们发现,对于一个固定的。然后你就发现样例都过不了。两个数,什么时候先选。求有多少种方案,使得。
2024-09-22 13:12:44
965
原创 【网络流】——初识(最大流)
通俗地讲,回到引例,现在有一个问题需要我们去解决:水厂在单位时间内最多能发送多少水给小区?这就是网络流中的一个问题:最大流问题。
2024-07-25 09:22:53
1387
原创 【题解】UVA1564/SP2883 Widget Factory
组方程,所以判无数组解时判完未知数即可,而判无解时要判全部方程。如果不是在模意义下进行,这就是个裸的高斯消元。个方程,我们只用判断最右边那一列是否为。那求一下逆元即可,注意答案有范围。再说一下无解和无数组解的情况。
2024-07-24 15:00:00
1757
原创 【题解】P4003 无限之环
考虑拆点,将每一个点拆成上,下,左,右,中五个点,中点连向源点或汇点,其余四个点和异种颜色的这四类点匹配。然后看看这个图有什么用,考虑将源点连向所有黑点,所有白点连向汇点,然后直接跑最小费用最大流,如果。蓝边第一个数为流量,第二个数为费用,这样我们就可以模拟旋转操作了。点贡献,所以总贡献因为接口总数的一半,否则就有接口匹配不上,就漏水了。再深入一点,我们用红边限制流量,用蓝边模拟旋转。条边,且费用为什么为那些数,最好模拟一下。接口数,那么解即为最小费用,否则无解。,这是这个水管的基本数据。
2024-07-24 10:26:35
857
原创 【数据结构】Splay详解
二叉树的性质使得插入操作变得非常简易,具体而言,只要值比当前节点大,就往右子树找,小就往左子树找,一样就让计数器+1,如果找不到匹配的值就直接新建一个节点。这个跟插入差不多,从根节点不断往下找,每次向右子树找时加上左子树的size+1,因为左子树和根的值一定比查询值小(BST的性质)。本文将介绍Splay,虽然它并不能保证树一直是"平衡"的,但对于Splay的一系列操作,我们可以证明其每步操作的平摊复杂度都是。的后继旋转到根节点的右子树上,这样根节点的右子树的左儿子即为目标节点,直接断开联系即为删除。
2024-07-15 16:02:10
1679
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅