- 博客(113)
- 收藏
- 关注
原创 AtCoder Beginner Contest 397 F题(线段树)
因此,对于额外产生的贡献,我们可以用线段树实现区间加法,并维护区间最大值。假设我们现在已经枚举了第一个区间与第二个区间的分界点。的数字,如果其出现了多次,则下一次出现的下标为。表示第二个区间的起始端点。如果第二个区间与第三个区间的分断点。表示第二个区间的终止端点)。个贡献,还有可能多产生。中有多少个不同的数。中有多少个不同的数。的值相同的数的下标。所以,最终的答案就是。
2025-03-16 12:04:41
1012
原创 洛谷 P1850 [NOIP 2016 提高组] 换教室(期望DP)【 提高+/省选−】
节课使用交换申请的移动耗费的体力值的总和的期望值的最小值。个教室的最短路,因为数据范围较小,使用。
2025-03-05 20:41:43
621
原创 洛谷 P3205 [HNOI2010] 合唱队(区间DP)【普及+/提高】
因为只有一个人时只会有一种方案。最后一个加入队列的是第。最后一个加入队列的是第。
2025-02-25 16:11:21
906
原创 Codeforces Round 130 (Div. 2) E. Blood Cousins(LCA+DFS序+二分)【2100】
对于第二点,我们可以按照深度,将所有节点的DFS序全部存储到vector中,因为DFS序的单调性,直接二分查找即可。对于第一点,我们可以使用LCA算法在树上倍增,实现快速查询。此题有两个要点:第一,快速找到节点。为根的子树中找到与节点。深度相同的节点的个数。
2025-01-29 09:55:46
445
原创 Codeforces Round 276 (Div. 1) B. Maximum Value(数学+二分)【2100】
在排序去重后的数组中二分查找最大的。
2025-01-28 11:43:54
945
原创 Codeforces Round 642 (Div. 3) E. K-periodic Garland(DP+前缀和)
个字符组成的花环所需的最少操作次数。,分为两种情况:第一种情况是第。
2025-01-27 14:14:58
802
原创 Codeforces Round 190 (Div. 1) C. Ciel the Commander(树的重心)
则删掉这个节点和与这个节点相连的所有边后形成的所有子树,其节点的等级必须小于。因此,我们要让分解出来的子树要尽可能的小,也就是求。个等级,所以我们考虑尽可能节省地使用他们。假设我们规定一个节点的等级为。因为我们最多只能使用。,所以本题一定有解。
2025-01-25 12:32:52
398
原创 洛谷 P1687 机器人小Q(DP)
因为要按照顺序来给机器人充电,所以考虑。个对机器人进行充电,所用的最小天数为。最小时最后一天的充电时长最短为。函数起到取最小值的作用。
2025-01-25 00:26:06
1394
原创 洛谷 P1523 旅行商简化版(DP)
我们可以将问题转化成两个人从同一个位置出发,走不同的路,最后到达相同终点的最短路径。时,第一个人走的上一个点只能是第。的所有点都已经被走过的最短路。时,其中一个人可以从第。个点,另一个人走到第。
2025-01-11 10:18:20
564
原创 洛谷 P3435 [POI2006] OKR-Periods of Words(扩展KMP+线段树做法)
因此我们可以在统计答案的过程中,用线段树来维护区间最大值,保证计算的答案是最优的。我们先用扩展KMP算法对字符串。(我们假设字符串的下标从。上的前缀最大值将变成。
2025-01-09 20:12:54
1220
原创 Codeforces Hello 2025(A—D)
首先,最优答案一定在这样的线段上:最大值和最小值分别在线段的两个端点上。如果不在端点上,我们便可以通过缩短区间来减小(r-l)的值来增大答案。
2025-01-05 13:33:40
1057
原创 洛谷 P10185 [YDOI R1] Necklace(二项式定理,快速幂)
种珠子时对答案产生的贡献。根据二项式定理,易推得。种珠子以外所有珠子的选取方案数,则。统计所有珠子对答案的贡献之和即可。种珠子对答案的总贡献为。
2024-12-06 23:19:50
725
原创 洛谷 P2380 狗哥采矿(前缀和,二维dp)
这个格子,如果向左转移矿,则其左边的格子必选全部往左转移矿,同理,如果向上转移矿,则其上边的格子必须全部往上转移矿。这个格子向左转移矿或向上转移矿时的最大采矿量。为右下角的子矩阵中,如果。来维护每一行的前缀和,用。来维护每一列的前缀和。
2024-11-29 13:50:24
1032
原创 牛客周赛 Round 69
右边的序列,我们使用二分来找到满足条件的最靠左的端点(即两刀中靠右的那一刀)对于可能选择的所有方案,使用二进制压缩,直接暴力check即可。我们暴力枚举左端点(即两刀中靠左的那一刀),最后用加法原理直接计算答案即可。赛时没做出来,过两天补上…类似于初中学过的饮马问题。先使用前缀和进行预处理。维护区间最大值,二分。
2024-11-24 21:11:27
462
原创 AtCoder Beginner Contest 381(A—F)(字符串哈希,二分,状压dp)
我们可以分别以奇数开头和以偶数开头,对两个相邻的字符进行合并。如果相邻的两个字符相等,则合并为一个,如果不相等,则合并成一个。对于字符串的匹配问题,我们可以考虑使用字符串哈希,这样可以使判断区间字符串是否相等的时间复杂度将为。进行预处理,使得枚举每一个"/"时,查询长度的时间复杂度都可以降至。所隔开的区间,用双指针求出不包含重复数字的区间最大长度即可。的长度为偶数,则其开头的第一个字符,在原串中的位置要么是。,满足条件的子序列的长度,一定是一个凸函数。对于求凸函数的最大值,我们使用二分查找即可。
2024-11-23 13:05:47
1180
原创 洛谷 P4011 孤岛营救问题(BFS分层图最短路,状态压缩)
我们考虑对已获得的钥匙进行二进制状态压缩。注意:同一个格子可能有多把钥匙,一开始的。显然,我们直接使用BFS求最短路即可。这个格子,且当前已有钥匙的状态为。
2024-11-14 21:16:14
1271
原创 洛谷 P3043 [USACO12JAN] Bovine Alliance G
很容易想到,每一个连通块之间是互不影响的。因此我们可以先计算出每一个连通块的贡献,最后运用乘法原理,将所有连通块的贡献相乘。条无向边,现在要求你把每一条无向边都变成有向边,且每个点的出度最大为。因此,我们只需要用DFS统计出每一个连通块中的点数和边数即可。如上图所示,当连通块中有一个环的时候,只有两种方案。如上图所示,在无环的连通块中,一定存在一个点的出度是。无向图中的边数 = (入度 + 出度)/,一定没有符合要求的情况,贡献为。
2024-11-14 18:50:37
784
原创 洛谷 P2966 [USACO09DEC] Cow Toll Paths G(排序,Floyd最短路)
我们可以先将所有的点按照点权从小到大排序,通过枚举中间点。,我们可以用Floyd求一遍最短路。我们用两个数组分别记录从。
2024-11-14 11:14:57
723
原创 洛谷 P1948 [USACO08JAN] Telephone Lines S(二分+01BFS)
这是一道非常经典的题。我们考虑二分最大的花费。号节点的最短路径,如果。
2024-11-13 20:01:30
1267
原创 洛谷 P2055 [ZJOI2009] 假期的宿舍(最大流)
我们可以求出从源点到汇点的最大流,如果最大流的值与源点。连边的数量相等,则存在一种方案,否则不存在方案。再根据所有的认识关系,从。
2024-11-13 17:13:52
472
原创 洛谷 P1407 [国家集训队] 稳定婚姻(Tarjan强连通分量,无向图定向)
对于求环,我们可以使用Tarjan强连通分量。但Tarjan强连通分量是基于有向图的,而我们构造的确实一个无向图。Tarjan求强连通分量,如果一对夫妻在同一个强连通分量中,则婚姻是不安全的,否则就是安全的。容易发现,上图的婚姻关系是不稳定的。因此,处在一个环中的夫妻是可以更换的。观察下图,黑色的边为夫妻关系,红色的边为情人关系。我们可以尝试给无向图定向。
2024-11-13 16:10:50
448
原创 牛客周赛 Round 67
非常明显的二分,注意此题会爆longlong,所以我这里使用了python。的最高几位,不断贪心即可。赛时没做出来,过两天补上…
2024-11-10 21:28:38
1135
原创 Educational Codeforces Round 88 E. Modular Stability
求出值域范围内有多少个它的倍数,然后使用组合数学计算答案即可。因此,我们可以枚举最小的。的倍数时才满足条件。
2024-10-29 21:13:11
1037
原创 Codeforces Round 946 (Div. 3) G. Money Buys Less Happiness Now(反悔贪心)
则需要进行反悔操作。从大根堆里面取出最大的。和一个大根堆,大根堆记录用了哪些。我们先尝试获得当前月的幸福,在每个月的月末,我们让。最终的答案即为大根堆中。我们维护当前拥有的钱。
2024-10-28 19:24:51
1118
原创 牛客周赛 Round 65(A—G)
从大到小排序,之后交换最大值和最小值的位置,遍历一遍比较谁大谁小即可。的结果刚好为病人症状的二进制数,则用当前使用药物的数量更新答案。为奇数,则不可能构造成功,因为每一次操作,都要让基地中最小的数。个药物能够治疗他的症状情况当作一个二进制数(即当病人的第。枚举每一个药物选或不选的情况。,则代表连最起码的基地都无法构造,直接输出。题,只是改一下数据范围即可。,我们考虑使用二进制状压。谁的单价低就全选哪一个。个药物,否则代表不使用第。这样的基地,否则就构造。时,才会保留药物的第。如果要求最小值:如果。
2024-10-27 21:59:28
1360
原创 Educational Codeforces Round 166 D. Invertible Bracket Sequences(线段树,二分)
想要反转一段区间之后的字符串仍然为正则括号序列,必须满足: 被反转的区间内,两种括号的数量相等。否则,反转之后的字符串绝无可能是正则括号序列。,则该区间反转之后的字符串仍然为正则括号序列。因为区间被反转之后,数组的区间最大值(因为是静态的,用ST表也可以)。的区间最大值具有单调不减的性质,因此区间右端点最大的值。上使用二分来求得满足条件的右端点的个数即可。,而想要字符串为正则括号序列,则所有的。,之后预处理出字符串的前缀和数组。枚举每一个被反转区间的左端点。,被反转区间的区间和为。的值所对应的数组下标。
2024-10-27 18:02:38
1026
原创 牛客小白月赛103(A,B,C,D,E)(模拟,找规律,计算几何,思维)
暴力枚举每一对点,求出两点所在直线的垂直平分线,扔到。的因子,根据因子,将下标分别存储到一个vector<排序之后判断一下相邻的三条边的长度是否相等。对于每一次查询,可以在vector<的排列,所以所有因子的规模是。暴力打表,肉眼观测即可。函数,我们可以倒着扫一遍。两个函数分开进行考虑。>中,可以使用map<函数,我们正着扫一遍。
2024-10-26 11:36:09
997
原创 Codeforces Round 673 (Div. 1) B. Make Them Equal(思维)
时可以最细化每一个数的操作,所以我们考虑所有操作围绕。加的数相同,所以每一次操作相当于将一个值从。
2024-10-25 15:25:23
952
原创 洛谷 P1186 玛丽卡(最短路,并查集,线段树)
我们枚举不在最短路径上的边,规定它是删除最短路径某一段后必定会走的边。这时我们只要找到该边替换的最短路径上的那一段路径,我们便可以知道删掉哪些边之后,最短路径会更新成。:因为我们要替换的最短路径上的那一段路径必然是连续的,因此我们可以将最短路径上的边视为点,整条路径相当于一个区间。因此我们可以用线段树来维护区间最大值。对于如何找到最短路径上被替换的那一段路径,我们可以考虑使用并查集来维护。,最短路径上的点的父亲规定为自己(即最短路径上的点为祖先)。,所以使用朴素Dijkstra更优。
2024-10-24 21:57:24
575
原创 Codeforces Round 660 (Div. 2) D. Captain Flint and Treasure(图论建模,拓扑排序)
的点,我们可以将其放入一个栈中,在最后统计到排列里。因此我们可以使用拓扑排序直接计算最终的排列,对于。连一条有向边,最后形成的图一定是一个拓扑图。个数对答案产生的贡献就是最优的。的,可以将其放到排列的后面。
2024-10-24 15:59:01
1154
原创 Codeforces Round 225 (Div. 1) C. Propagating tree(DFS序,树状数组)
为根的子树的所有节点进行一次操作,因此我们可以用DFS序来将每一棵子树的所有节点限定到一段连续的区间内。因此我们可以用一个树状数组来维护区间和,具体操作可见代码。操作,跟树的深度有关(也就是深度的奇偶性)。对于子树内每一个节点是进行。
2024-10-24 14:31:18
476
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人