- 博客(195)
- 收藏
- 关注
原创 牛客多校05K题 Perfect Journey
这把牛客多校的A和K都不会(第四和第五题),但是发现B和C都很简单(虽然过的人比较少),过了5题。发现自己对FWT等多项式算法的理解还不是很够,写一个博客记录一下。
2025-07-30 08:26:25
723
原创 [ARC186A] Underclued
定义两个nn≤30阶0/1矩阵A和B是的,当且仅当二者同一行同一列和相等。如果某个矩阵的某个位置是的,当且仅当其所有的相似矩阵和它在这一位都相等。接下来有q次询问,每次问你是否存在某个矩阵,其恰好有K位是的。
2025-07-28 19:09:22
714
原创 min_25筛学习笔记+牛客多校02E
本来没有学习这种较难的算法的想法的,因为比赛也做不到这种难度的题, 但是最近打牛客多校02,有一题要求1n中素数的个数,我以为是像莫反一样容斥,但是后面感觉不行。赛后知道是用筛来求,赛时过了一车,因此我也不得不学习这个算法了。我打算拿洛谷里面的来举例。就是给你积性函数fx⎩⎨⎧kgx∑i0kaixifx1fx2x1xpcp∈primec≥1x1x21然后让你求i1∑nf。
2025-07-19 21:49:30
801
原创 min-max容斥学习笔记
回到这一题中,因为有期望,所以这两个式子不能直接用。但因为期望实际上把全部情况加起来,因此可以直接把两边加上期望,即。在这一题中,集合就是没有被污染的行和列,而max操作就意味着要把集合行和列全部染上。个点在选出来的行和列里面,尝试计算把全部点染完的期望步数。首先,染完第一个点的概率是。最近报了航电的春季赛,在一道题目里面遇到了做法,感觉挺有意思。这两个公式还是比较容易理解的,这里只拿第一条式子进行分析。个比它小的数,那么这个元素总的贡献就是。,因此这么容斥下来就会得到最小的数。,因此类推,总的贡献就是。
2025-07-19 21:33:13
669
原创 总结近来一个月我没有做出来的基础题
你有n1≤n≤105个物品和一个容量为V1≤V≤500,每个物品三个参数hisidi1≤hisidi≤500,选择∑s不超过V的 物品使得式子∑h−∑d∗V−∑s最大。第一步是固定tV−∑s,然后每个物品的贡献就变成了h−d×t,然后用背包求解即可。然后总的复杂度是OnV2,我想了很久都没有想到要怎么优化。我以为优化不了,所以尝试改变式子:∑h−V∑d。
2025-07-18 15:23:48
637
原创 [ARC195E] Random Tree Distance
有一个比较常见的思路,就是把总和转换成期望值,然后把统计出来的期望值乘上情况的总数即可。的点有 1,2,3,…,u ,因此我们只需要计算出每个点成为。,有两种可能的情况发生:第一种是已经满足。,那么不会有任何的影响;现在告诉你每个点连向父亲的边的边权。在所有可能可能情况下的距离和。的值无关,因此可以预处理出来。我在做这题的时候是先分析出了。现在来讲讲出现这个概率的原因。前面的点,因为最后这一跳有。我们发现每个点深度的期望值。一直往前跳,如果跳到一个。个点可以选择,因此跳到。一棵树上每个点的父亲。
2025-07-11 11:18:17
661
原创 RUC校内OJ #1014. H. 采购账单
小T老师最近为一堆采购物资的报账而烦恼!采购N件物品,每件物品的价格为Pi。按照财务要求,每笔报账单可以包含无数件物品,但价格总和不超过V。现在小T老师想知道,最多能报账多少金额。此外,在保证金额最多的前提下,最少分多少笔报账单。NV第二行N个正整数用空格隔开,表示每件物品的价格Pi一行,两个正整数用空格隔开,分别表示最多金额和最少报账单数量。
2025-06-21 12:47:04
711
原创 杭电多校10 : 1007 小塔的魔法树
比赛的时候这道题看到后没有立即想到思路,虽然不算很难,但还是比较初见杀的。后面想着如果是一个连通块,直接用在dfs序上面找不选的点就好。感觉树形dp主要的问题是不能很好的利用只有一个连通块的条件。,那么其子树就不用再去遍历,直接给。比较常见的思路是采用树形dp,用。那么就有两种方案,如果选择。
2025-05-17 10:37:15
969
原创 航电春季赛(七)1010 网格计数
考虑每个格子的选择,观察其所处在的L字形,也就是这个格子和其上面的格子和右边的格子所组成的集合,这些格子的数都不相同,并且该格子大于其上面的,小于其右边的,有明确的排名。我们先找到满足每个L形里面所有数都不同的方法,然后再排除掉大小关系不正确的情况。的情况是合法的,即刚好满足当前格子的数大于上面,小于右边,因此总共需要乘上。,因为其所在的L形仍然保持无序,也就是每个数字本质上都是相同的,有。的格子,第一行填行号,第二行填列号。删除掉不合法的情况,对于当前格子。进行填数,产生的方案数为。
2025-04-19 16:46:20
723
原创 [gym105755] Bay Area Programming Contest 2025 K. Killer Cows
的暴力需要每次枚举子集,但实际上运输过来的时候那些奶牛怎么选都是可以的,因此我们实际上是能够一头一头的选。合法的情况下去到另外一边,另外一种就是再从对岸选一头奶牛过来(num<k)。,但是我确实没有想到。我以为是要用什么性质,但是实际上就是一个技巧。边(0表示左边,1表示右边),对岸奶牛为。头奶牛运送到另外一边,问最少要送几次。组奶牛不能在同一边,每一次最多只能将。因为实现是10s,所以我第一次用。有两种转移,第一种就是在。头奶牛运送过河,其中有。表示我已经从对岸带了。
2025-03-06 09:02:16
899
原创 ARC193总结
第四题的突破口是最左边的1和最右边的1,每次操作二者都会相互靠近,直到这两个的距离和需要达到的串的二者距离一样才停止,然后再平移到对的位置,因此只需要判断能不能匹配到,并不用考虑最小贡献,因为左边的1和右边的1都有可能进行依次操作,因此我们对四种情况都判断一次即可(准确是两个,因为可以用奇偶性排除掉不符合要求的另外两个),判断的时候考虑响铃两个1之间0的个数,因为奇偶性的影响是相同的,因此只要能匹配(即当前的0个数>=标准差相应位置的0的个数)就匹配,奇偶性不同让后面的来凑。这次ARC一共四题,做了两题。
2025-02-28 15:17:51
187
原创 CF794E Choosing Carrot
有一个序列,两人轮流取走第一个或者最后一个数,剩下一个数游戏结束。先手想最大化,后手想最小化。对于k=0,1,2,…,n-1,假设先手在游戏开始前操作k次,那么游戏结果是什么。手玩可以发现,如果是奇数,因为两人都有能力强行让最后一个数在中间三个,因此只和中间三个有关,如果中间是最大的,那么答案就是两边的最大值,否则就是中间。如果是偶数,那么就是中间两个取最大的。
2025-02-20 13:16:14
179
原创 nim游戏及其进阶 [SDOI2011] 黑白棋 [SDOI2019] 移动金币
把n拓展到更大,就会发现偶数级阶梯(现在假设地面为第0级阶梯)的石子时没有意义的,因为如果把偶数的石子移到奇数的石子能形成更好的局面,那么后手就能把这些石子再往移动一级,可以依次从第二级,第四级往下递推思考。然后想到一个比较奇怪的事情,以前学nim的时候我就一直十分不解为什么结论会和xor有关系(因为异或是一个二进制的操作),因为异或实际上是把每位相加再模二,然后就感觉可能会是模数变化(变成d+1)这样操作了肯定就不为全为0了,或者是进制变化(比如变成d+1进制之类的)。
2025-02-19 22:09:14
261
原创 [NOI2006] 最大获利
思考了很久以后发现可以假设先把所有边权选上,然后思考最多保留多少,也就是要么变成某个最小割,如果这条边想要保留就要花费选择点的费用,不然就要花费删掉这条边的费用。又思考了很久,想到了“要么就要删掉一条边,要么就要选择两个点”这个性质,然后意识到可以以点代边,也就是二分图,左边是边,从源点连。给你一个有点权和边权的图,让你找出一个子图,使得其边权和-点权和最大。第一眼感觉要用网络流来做,因为这个问题有非常复杂的性质。的边,右边是点,往汇点连。的边,然后对于每条边往。感觉是一道很难的题。
2025-02-19 13:36:07
328
原创 CF388C Fox and Card Game
桌子上有n堆牌。每张牌上都有一个正整数。Ciel可以从任何非空牌堆的顶部取出一张牌,Jiro可以从任何非空牌堆的底部取出一张牌。Ciel先取,当所有的牌堆都变空时游戏结束。他们都想最大化他所拿牌的分数(即每张牌上正整数的和)。问他们所拿牌的分数分别是多少?
2025-02-10 20:13:49
845
原创 ARC191C. A^n-1
值得一题的是,我pollard_rho最开始只检验10次,但是过不了,改成20次就可以通过。,需要用pollard_rho把素因子分解出来再检验是否正确,然后判断。这道题帮我完善了判断素数和原根的板子。应该是一个素数,因为素数的数量大概为。,让你求出一个整数对。从原根的角度想,显然。然后找这个素数的原根。是不是都不为1即可。
2025-02-06 12:03:19
841
原创 Gym - 101775L SOS
后手同理,但是先手会阻挠,把O放在中间,如果7*2=14的话有一边会因为O的阻碍形成不了,16的话就没问题。先手想赢肯定是要构造出S_ _S,而且要尽早,所以应该S放中间,然后肯定有一边能够形成,所以是7。两个人在一个1*N的网格上填字母S或者O,谁先形成SOS就算赢,让你判断谁会赢或者平局。根据奇偶性,如果形成这样的情况,那么先手在奇数可能赢,后手在偶数可能赢。手玩一下感觉很奇怪,因为不知道该怎么赢,所以去最后为什么会有人输。后面发现是形成S_ _S这样的情况走一步一定会输。
2025-02-04 17:46:16
229
原创 2023CCPC-Final A. Add One 2
然后求贡献,我们先假设从x开始只能增加,不能减少,那么最好的方法肯定就是从左往右遇到比自己更高的就增加到这个高度(初始高度为。想了一个上午,主要是突破口不好找,找到突破口以后很快就能出来。这些可以减少的位置都是固定的,因此可以先处理出来然后再枚举。要考虑若干个前缀和若干个后缀能够形成的序列形态。个位置减少,使得减少的总量最多,很明显对于不同的。然后发现只要减少1是需要固定的(也就是固定。个后缀,那么这个序列从左往右就是从。),增加1完全可以看情况来决定。,现在让你用最小的代价使得。
2025-02-04 13:04:00
893
原创 CF1098F Ж-function
可以把贡献拆成两部分,第一部分是求原串中的LCP之和,显然这样有一些超过。第二部分就在前一题的基础上多进行一些对长度的分类讨论就行。第一部分先用SA,然后正着扫反着扫用分块维护。,而这些都是border,然后就用。的方法来修正这一部分的贡献即可。和前一道题一样,用了根号做法。
2025-01-29 23:12:59
857
原创 [BJWC2018] Border 的四种求法
循环节能够延申到的长度, 然后找到当前与之对应的位置判断是否合法(这里比较抽象,稍微思考即可理解),然后把这些位置全部跳过即可。整整想了三天,一开始想用数据结构但是想了很久也不知道怎么维护,然后从border的性质入手想出了一个。,这样就不能暴力求解了。出现的每个位置,然后判断每个位置能不能成为 border。的循环节能够延申到的最长长度。类似的字符串,那么出现的位置就会是。下一个出现的位置然后暴力求解即可。,那么其每次出现的间隔至少为。,那么其出现的次数不会很多。,那么循环节的长度为。
2025-01-25 21:13:58
808
原创 P5161 WD与数列
如果认为两个数列是匹配的,当且仅当它们长度相等并且给其中一个数列的每一个数加上一个整数能使得二者相等。先做差分,就变成了判断是否相等了。不过要先把长度为1的情况统计,也就是让。的贡献,然后枚举少的一边求,发现可以用线段树合并求解,时间复杂度。现在给你一个数列,让你求有多少对不相交的子串是匹配的。数组建笛卡尔树,然后进行分治。
2025-01-22 15:46:02
463
原创 [八省联考 2018] 制胡窜
值得一题的是,我的代码在洛谷一遍就过了,但是在loj拿了0分,测试一下发现本地是对的,但是loj评测机的环境就是错的,我尝试交打印调试信息的代码,结果发现加了几个cout输出就正确了,非常奇怪。相等的子串,并且两两相交部分不超过1,那么一定是任意整数对都满足条件,我们把这种情况特判一下,剩下的情况就有。对应的点为 p,考虑 p 的 endpos 集合,假设其大小为 m。,只要保证选择的空隙都在最左边的出现位置和最右边的出现位置之间即可。为不与最左边出现位置相交的出现位置的 endpos 集合,然后枚举。
2025-01-20 22:31:59
410
原创 CF700E Cool Slogans
因此我们只需实现两个功能:(1)查找某一段下一个出现的位置,可以用sam和线段树合并处理;(2)求等差数列的长度,也就是新加的那一段重复出现了多少次,可以用哈希+二分来求。就是kmp一连串的border,而kmp的border有一个常用的性质:会形成log段等差数列。我看题解里没有人用kmp里border的性质来做,就来写一发。的子串,使得后一个在前一个中至少出现两次(可以有重叠部分)。以此类推,直到找不到位置。然后统计出现次数,对每个。手玩一下,发现只需要先固定一个起点。求完以后取最大值即可。
2025-01-20 11:54:42
568
原创 CF1063F String Journey
这道题给我了一个重要的启发:就是一下子理不清楚思路的时候可以打一个暴力,然后再思考怎么优化这个暴力。给你一个字符串,让你从中提取处最多的连续子串,使得这些连续子串在顺序保持不变的情况下满足后一个是前一个的真子串(必须非空)。也有单调性,所以可以用倍增来找到点,点内开个vector存段,在点内寻找的时候用二分,就能做到时间空间都是。1.后一个的长度是前一个的长度+1,即在后一个串的前面或者后面多加上一个字母,接下来我们强制这个条件满足。先把字符串反转,那么条件就变成了前一个是后一个的子串了。
2025-01-19 12:56:14
517
原创 2024CCPC济南 E. The Chariot
这种情况肯定是有一辆车一直开,其它的车都只开A的段。米的最小花费是多少。(给的数字都是高精度),如果你可以乘搭无限多辆出租车,那么前进。那么每辆出租车应该要优先把B的路程走完。然后考虑怎么处理着一些情况。一道很恶心的分类讨论题。然后假设剩下的情况都是。
2025-01-13 15:42:58
844
原创 P5576 [CmdOI2019] 口头禅
如果这个节点的儿子已经贡献了这一条线段,那么这个节点就不需要再贡献这条线段了。也就是说只要在这个树上启发式合并,合并后新产生的线段数量。然后就把询问离线一下,拿一个树状数组扫描就可以了。先建出广义SAM,然后考虑每个节点贡献的线段。个01串的最长公共子串长度。
2025-01-11 09:41:45
261
原创 [十二省联考 2019] 字符串问题
给你一个字符串s,然后有na个A型串和nb个B型串,这些串都是s的一个子串,以区间的形式给出。有些A支配了B,给出支配关系。现在要你以某种顺序选出A型串(可以重复),假设选择了k个,使得对于每一个i∈1k−1,满足有一个被其支配的B串为下一个A串的子串,让你求最大长度和。
2024-12-25 11:16:57
904
原创 P1368 【模板】最小表示法
后面想着ans和i应该也有相同的性质,如果比不过就应该直接跳,这样就想到了双指针的做法,基本和书上一样了。假设当前最优的是1开头,然后我们用从2到n枚举以i开头的表示和当前最优的哪个更优。后面仔细分析了一下发现复杂度不对,主要是更新那个地方.可以构造数据。特别地,如果n个字符相等,那么就出现了循环节,直接退出即可。最近想起来了这个问题,记得当时做《算法竞速进阶指南》见过。不过现在忘记的差不多了,打算重新推一次。
2024-12-23 11:07:49
313
原创 洛谷P6292 区间本质不同子串个数
对于每个i,都要把子串[1,i]所处的点到根节点全部节点的最大endpos都赋值为i,这就相当于lct的access操作,当然access中每次splay以后都要把原来的贡献剪掉。从1到n考虑所有R=i的询问,显然parent-tree上每个节点应该要考虑最大的endpos,然后要给。给你一个字符串,每次询问输出区间[L,R]生成的子串的本质不同的子串。,如果强制在线只需把修改放到可持久化线段树上就行了。,全部加上1,查询就是。
2024-12-16 14:41:14
812
原创 线段树合并的复杂度证明
有时候线段树合并的时候要新建节点,因此我就很好奇这样的空间复杂度到底是多少(显然时间复杂度和空间复杂度是一样的)。因为parent-tree上线段树合并是为了维护endpos集合,因此最终会合并成一棵满二叉树。最近在做sam,经常遇到要在parent-tree上面线段树合并的题目。考虑每一个节点需要合并的最多次数,也就是叶子节点的个数。常数为2,一部分是建的链,一部分是合并产生的新的点。我们知道,每一层总叶子都是n,有log层。,n是字符串长度而不是sam的点数。我就试着自己证明一下。
2024-12-13 10:00:04
296
原创 [HEOI2016/TJOI2016] 字符串
第二段没有超过a的限制,那么很明显答案就是区间的长度,因为区间长度递减,因此我们只需要统计第一个没有超过a的限制点。第一段超过a的限制,仔细观察发现ed会随着你往上跳单调递增,因此我们只需要用倍增直接跳到最上面的一个超过a的限制的点,然后求答案即可。不用考虑子树里面的点,因为子树里面的长度肯定都超过要求。然后就需要考虑一下a的边界条件,然后就会发现如果从d所对应的点一直往上跳,那么点就会分成两段。我们肯定要找到当前的点的endpos集合中<=b并且最大的一个,记为ed,这样才能求出贡献。
2024-12-12 18:48:08
728
原创 2024CCPC哈尔滨:B题Concave Hull
值得注意的是,我一开始用double,但因为答案是10^18级别的,double的尾数位只有52位,因此会掉精度,所以我们要用long long来做,处理的时候把面积都乘上2就行。平面上有n个整数点(无三点共线),然你找到最大的简单非凸多边形(输出面积的两倍),如果不存在面积严格大于0的简单非凸多边形,就输出-1。后面发觉只需要把里面的点再建一个凸壳,这个最小三角形肯定要选择内部凸壳上面的点。一开始想着怎么样求凸壳内部某个点与凸壳形成的最小三角形(底边为凸壳的边)。因此只需要用两个指针扫一下就行。
2024-12-12 08:39:31
230
原创 CF2046D For the Emperor!
个信使,信使可以复制无限数量的宣传单给其他同一个点的信使,也可以沿着边走,你开始可以选择给其中的几个信使发宣传单,让每个点都被拿着宣传单的信使经过,要你输出开始给最少的宣传单能让信使完成任务,或者判断任务无法完成。首先肯定是Tarjan缩点,把一个环缩成一个点,点的信使数量为全部点数量之和,记为sum。因为B足够大,因此费用流肯定会在满足到达尽量多的点的情况下使得经过。后面第一个参数表示流量,第二个参数表示价格。这个和有约束的网络流是同样的道理。B是一个足够大的常数。然后利用费用流完成。
2024-12-10 09:57:37
515
原创 洛谷 P5212 SubString
给你一个字符串,每次操作可以在这个字符串后面多插入一个字符串,或者查询某个字符串的出现次数,并且强制要求在线。很明显需要先建一个SAM,然后在parent-tree上面求解,要维护某个点的子树和。但是现在问题来了,parent-tree是会不断变化的,所以我们要用lct维护。每次插入一个点,就往这个点到1的路径上把每个点的权值加上1。
2024-12-06 14:09:39
184
原创 [CCPC 2023 秦皇岛] K. Make SYSU Great Again II
给你一个n*n的方格,你要给每个格子填上04n2−1中的数,要求每个数不超过5次并且相邻两个数取AND为0。
2024-12-03 19:20:11
289
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人