- 博客(29)
- 收藏
- 关注
原创 题解:P1040 [NOIP 2003 提高组] 加分二叉树
不难发现这个分数的形式和数据范围很像区间啥的,那么考虑区间 DP。,那么此时我们应当将这些东西当作题目中的“空结点”来算,也就是。这段能得到的最大得分。一层层递归回去,就能得到前序遍历了。找最大值的时候找到最大值对应的。前序遍历也好算:对于一个区间。的东西,而这东西默认是。这样就可以算出最大值了。注意一个问题:由于这里。,那么可能会出现类似。
2025-02-23 18:34:16
530
原创 《算法竞赛进阶指南》做题笔记
那么对于这个状态,我们直接找下一个该去哪个点。我们从高到低枚举第几位,对于每一位,计算如果初始时这一位是。那么统计答案的时候判断一下是否有逆元,如果没有那么就乘上。逆元的要求是操作数和模数必须互质,但是有可能。至此我们证明了这种贪心是对的。那么排序计算即可,时间复杂度。这样就可以可以用逆元和快速幂解决。从小到大排序,排好序之后从上到下摆放。,此时是没有逆元的。那么此时我们会发现,在上面,那么第二头的压扁指数为。在上面,那么第一头的压扁指数为。,所以第一头奶牛放在上面更优。个点,那么有转移方程。
2025-02-22 13:17:29
1139
原创 题解:CF2053D Refined Product Optimality
操作,所以除了相等的数以外数组仍然是有序的。那么实际上你可以直接找到最后一个和原来应该修改的那个数相等的一个数,修改这个数即可。因为每次修改结束后,如果暴力的话,我们都会重新排序,并且由于每次都是。由于有除法,所以需要再算一个逆元。这样就可以快速维护答案了。第一次自己做出 Div.2D(虽然是 Div.1+2),纪念一下。所以我们可以考虑初始时求出答案,记为。首先考虑没有修改操作怎么做。对于每一次操作,假设最终修改的位置是。都从小到大排序,结果显然是最优的。但是如果暴力修改,复杂度仍然是。
2025-02-22 13:15:50
965
原创 题解:P1541 [NOIP2010 提高组] 乌龟棋
其中这四个数分别是四种牌的数量。也简单,从当前状态中任意删掉一张牌,然后在四种情况中取最大值即可。注意如果某种牌目前一张都没用,那么是不计算他的。整体方程较长,可以看代码。,实际上一般情况完全比最劣情况的运算量还要少,因此可以通过。,而且最劣情况下运算量也大约是。
2025-02-22 13:11:48
739
原创 树状数组学习笔记
那么直接拿权值树状数组优化,时间复杂度。首先,因为本题只要求数之间的相对顺序,所以我们可以使用离散化,将所有数映射到。然后发现这是一个单点加,区间和的东西,用树状数组维护一下即可。那么我们考虑直接转换成树状数组 2,对于查询操作,将差分数组求和之后模。假如数据范围很小,那么这就是一道 DP 题。树状数组,顾名思义,就是一个数组。然后可以得到一个暴力做法:建一个数组。那么就可以用树状数组完成了。的定义,可以发现你可以通过不断将一个。本文仅作为树状数组入门讲解。树状数组应用:权值树状数组。
2025-02-22 13:01:28
969
原创 最小生成树 学习笔记
我们可以在选每一条边的时候,判断这一条边连接的两个点是否已经连通,如果已经连通那么这条边就是浪费的,不能选。这个算法的原理很简单:既然要让边权之和最小,那么每一次就贪心选择当前还没有选过的权值最小的边。而最小生成树是指,在一个无向图的所有生成树中,边权之和最小的生成树。donnieguo 告诉我他在学最小生成树,于是想起来了,补一篇学习笔记。,发现图中产生环,跳过这条边。,发现图中产生环,跳过这条边。,发现图中产生环,跳过这条边。,并连接 A 和 D。,并连接 D 和 F。,并连接 A 和 B。
2025-02-22 12:45:51
850
原创 Project Euler 题解
这个方阵不太方便直接弄到程序里,所以当做输入数据就可以了。会超时,但是实际上远远跑不满,所以直接枚举。直接枚举直接枚举直接枚举。怎么前面的题都是无脑题啊?拉插一下就可以得到题目中所说的“最优多项式” 了。我写的是高精度,代码比较长,题目很简单,就不贴了。注意不一定第一个比第二个大,要取绝对值。直接写一个高精度,或者用 Python 即可。猜一波小的质数不会太大,于是直接枚举。那么可以使用 C++ 自带的(从。算出来,然后直接对着每个。最后可能是个大质数。函数将数转成字符串。
2025-02-22 12:42:50
2283
原创 并查集学习笔记
那么,对于两个有亲戚关系的人,它们所在的树必然相等,那么根也就相等。"并"指的是合并两个集合,"查"指的是查询元素所在的集合。这种优化在合并时,会将深度更小的那一棵树合并到更大的那一棵树上,这样不仅能降低时间复杂度,还能尽量减少树的深度。并查集是一种基本操作较为简单,应用广泛的数据结构,使用它可以解决许多与集合合并等相关的问题。A:因为相当于将自己的父亲直接设为了整棵树的根,自然就达到了我们的目标。,查找两棵树的根,并将一个树的根作为另一棵树的根的儿子;个结点的树里面,按照原来的方式查询,平均复杂度为。
2024-04-27 17:27:37
796
原创 [ABC090D/ARC091B] Remainder Reminder 题解
个数可以作为可行的被除数。除去最后一段,前面一共有。,这个值就应该是负数。所以最后一段的贡献为。原因留给读者思考),所以记得减去。时的枚举是没有意义的。最后一段的长度显然为。,而这个值可能大于等于,也可能小于。所以,除去最后一段的答案为。其中,整个数列被分成了。,那么这一段的长度为。由于余数至少大于等于。
2024-03-11 21:38:50
1803
原创 CF1926E Vlad and an Odd Ordering 题解
容易发现,很多操作是无法取出任何牌的。例如奇数倍的奇数操作,由于奇数。奇数一定等于奇数,所以这些牌一定已经被取过了。倍的奇数这一次操作之后。然后就可以枚举出这一张牌了。这说明在当前的取牌过程中达到了。奇数,所以这些牌也已经被取过了。,累加取出牌的张数。那么,我们可以进行循环,枚举。奇数的操作才有可能取出牌。综上,根据手动模拟,只有。倍的奇数,可以分解成。
2024-03-11 21:36:53
530
原创 CF1926D Vlad and Division 题解
首先,题目中说每一组中的数需要两两之间都满足二进制完全不相等,所以一组只能有。是否存在于数组中且未被配对过。如果有,那么标记两个数被配对过并令。只能自己单独成一组,同样令。那么我们只需对于每一个。注意这题不卡时间但是卡。,如何构造出二进制与。每一位都不相同的数。
2024-03-11 21:36:20
446
原创 P9463 [EGOI2023] Inflation / 通货膨胀 题解
总结:这题考察的是桶的思想,以及一点点贡献法,有一定的思维难度,建议评黄。可以发现,要求输出的只是所有价格的总和,而且。最后,在加完以后,记得将桶更新,原来所有的。可以尝试将操作离线下来,和前面的。我们现在已经知道了怎么快速完成。出了这题的数据,就来写篇题解。再加上初始的元素和,可以做到。我们用一个桶来存储就可以了。本部分讲解如何通过子任务。直接模拟,没什么好说的。那怎么统计有多少个值为。于是总时间复杂度降至。至此,本题就完成了。
2024-03-11 21:35:39
471
原创 UVA11850 Alaska 题解
注意一个特殊情况:因为是往返,所以离开最后一个充电站后先到达公路终点,再从公路终点到达最后一个充电站,也就是要走两次,所以这个要特判,如果最后一个充电站离终点超过了。第三步,判断最后一个充电站如果最后一个充电站离终点超过了。的取值范围,我们猜测输入中没有重复的充电站位置,所以。首先,我们可以明确,遇到充电站后,电量一定是会变成。第二步:枚举每个充电站与前面一个的距离,如果超过了。单位距离后还没有充电站,那么就不可能。的,也就是可以继续行驶。个单位距离,就无法完成。,为了保险,我这里开了。
2024-03-11 21:34:47
835
原创 P9556 [SDCPC2023] A-Orders 题解
记录在每一个交付事件前能做多少货物。对于每一个订单,用之前订单剩下来的数量加上这两个订单之间能做好的货物量,就可以得到交付时的货物数量。因为时间限制更重要,所以我们以交付日期为第一关键字排序(有没有第二关键字都行)。挺简单的一道题,考察简单贪心,建议评橙。
2024-03-11 21:33:52
311
原创 P9553 「CROI · R1」浣熊的语言 题解
把特殊的日子用一个 bool 数组存下来,如果哪一天学习单词/复习单词时,有特殊情况,就不断与后面交换,直到哪一天能学习为止。因为我们是将特殊情况在输入时直接处理,所以对后面的程序没有影响。,代表每一天都可以按计划学习,那么对于每一个单词直接模拟即可。总结:这一题并没有太大的思维难度,比较考察代码实现能力,建议评橙或者黄。s,把这两个点大力卡卡常,也许还能过;次,所以最后一个 Subtask 有两个点超时了。我们会发现,上一个程序中,最坏的运算次数会达到。的,也就是说,总天数一定不会超过。
2024-03-11 21:32:11
444
原创 P9373 「DROI」Round 2 构造与取模 题解
(这个蒟蒻赛时想了 2.27h 才过 QwQ)警钟撅烂:不开 long long 见祖宗哦。有了结论,代码就好写了。:被喷了,重新修改。
2024-03-11 21:30:51
380
原创 P9949 [USACO20FEB] Triangles B 题解
轴离它最远的组成三角形即可。编写代码时需要区分好四个数组。的所有点中横坐标最小值。的所有点中纵坐标最大值,横坐标为。的所有点中纵坐标最小值,纵坐标为。的所有点中横坐标最大值,纵坐标为。输出时记录四个数组:横坐标为。解法,但是思路大致相同。
2024-03-11 21:29:34
280
原创 P9914 「RiOI-03」匀速相遇 题解
注意 map 常数比较大,想要卡过去有点难度;所以我们改用 unordered_map。,怎么判断它们是否能相遇?根据交叉相乘积相等,上式可转换为。做这道题,首先我们思考:对于点。RiOI 的题目都非常赞啊!
2024-03-11 21:24:18
1787
原创 P9578 「Cfz Round 1」Permutation 题解
而且我们发现,第一组是小在前,大在后;第二组是大在前,小在后;第三组是小在前,大在后。总结:质量很高的有意思构造题。直接枚举全排列就行。这样,规律就找到了。
2024-03-11 21:17:28
397
原创 P9573 「TAOI-2」核心共振 题解
本题考察的是简单贪心 + 简单数学找规律,重点是比较考验代码能力,是一道好题。都无法配对,也就不可能产生共振。但我们的程序仍然在判断,导致运算量过大。很显然,我们的做法是正确的,但是超时了,问题在于常数太大。找到规律:先放所有的奇数,再放所有的偶数。其实此时,既然不能共振,那直接顺序输出。直接枚举全排列,找到共振最大值即可。的倍数,只能选择再选择一个余数为。对于转换,可以自己手推一下,得到第。到这里,我们看起来就做完了这道题。放在最前面,接下来,为了凑成。赛时被卡常了,硬是没想到特判。
2024-03-11 21:03:06
1652
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2