- 博客(50)
- 收藏
- 关注
原创 2024 信友队 noip 冲刺 10.10
前缀和 + 二分即可,再考虑一下左右端点还在睡觉的情况。printf观察到我们并不关心i点被哪个特殊点覆盖,而关心走到i时最多还剩下多少步用于继续扩展。我们以每个特殊点为起点、开始的权值为hi;将边权设为−1,然后跑最长路(此时可以用 Dijkstra 求解,负权最长路就是正权最短路)即可。printf。
2024-11-08 20:30:00
1028
原创 2024 信友队 noip 冲刺 10.11
不妨考虑图中的一条链,可以发现这条链的起始点要向链上所有点连边。那么可以推出对于点 uuu,需要向 uuu 能走到的所有点进行连边。nnn 次 dfs 即可。T2考虑使用 来维护每个点连出去的边,然后就做完了。删边时均摊 O(Q)O(Q)O(Q)。T3考虑分别建 nnn 个点表示 nnn 个集合,建 mmm 个点表示数字,每个集合向集合中的数连边权为 111 的有向边、数向包含它的集合连边权为 000 的边,从所有包含 111 的集合开始跑最短路,最后的答案即为 mmm 值对应的点的最短路 −
2024-11-08 16:11:58
833
原创 2024 信友队 noip 冲刺 10.8
考虑一个数字能被选择的条件。假设我们已经把 kkk 个数选进答案子序列中,那么对于没选择的数 iii,它能被选当且仅当 [i,n][i,n][i,n] 中有剩下没选的所有数字。我们考虑对于每个 iii 求出 [i,n][i,n][i,n] 中数的种类数 f(i)f(i)f(i),然后从大到小枚举 kkk,每次找到一个满足 f(i)=kf(i)=kf(i)=k 的 aia_iai 最小的数作为答案的下一项。显然 f(i)f(i)f(i) 从后往前单调不降,那么我们可以求出最靠右的 f(i)=kf(i)=kf
2024-11-08 16:07:39
872
原创 2024 信友队 noip 冲刺 10.5
最后得到的策略是:Alice 若往左走,那么 Bob 就顺着她走直到碰到边缘,然后再让她飘回到另一端下去到下一行,当然还有直接放 Alice 下去的选择。首先,由于弹出的是最大值,所以减少的伤害必然不小于上一次受到的伤害,即当前总伤害。维护一个堆表示当前战胜的敌人,从前往后时刻保证当前堆是最大战胜数量且受到伤害最小的。Alice 的目标是最小化分数,Bob 的目标是最大化分数,求最优操作下最终获得的分数。边权的边,但是显然走后者比走前者优。的路径,我们一定是将路径在点上划分为若干段,使得每段的边权和。
2024-10-26 07:30:00
777
原创 2024 信友队 noip 冲刺 10.4
赛时糖丸了,推了一个关于平方的做法,差点就被我发现了。显然最小的取法就是从每个集合中取一个最小值求和,我们设这个最优值为。子序列(可能往上往下有出入,大概长这样),于是我们考虑把。从小到大排序,每个集合内部按从小到大排序。考虑其可能的后几个略小一些的状态。的暴搜做法,然后又拼了一个乱搞做法:每次比较。循环组成的串,然后在对应位置插入若干个。产生的增量,哪个多操作哪个,最终骗到。然后一种可行解是随机化,正确率还挺高。的元素个数,从大往小考虑,若。要求按顺序操作,求操作后最大的。大的值,最初始的状态即为。
2024-10-26 01:15:00
906
原创 2024 信友队 noip 冲刺 9.28
的小数据分和两档特殊性质,分别是单点修改和单点询问。很小可以直接枚举每个子串的和,然后扫一遍即可。的常数,用来处理循环节。线段树上每个点记录一下是否进入循环节和循环节的数组即可。,需要选择若干段不相交子串,使得每个子串的和相等。的路径(可以走重复的点和边),将路径上经过的边的值依次连接可以组成若干。会出现循环节,然后就可以用线段树维护了,循环节长度可以打表发现是。套路:把买和卖放到一起做,对于买的情况价值取负。的复杂度的做法,但是没有想出来,最后写了一个。相等的情况,显然应当先考虑买后考虑卖,痛失。
2024-10-26 00:00:00
926
原创 2024 信友队 noip 冲刺 8.30
观察到 Alice 非常被动,没有绝对的最大化策略,于是被 Bob 薄纱,只需考虑最小化即可,原题从博弈论变成两两分组使得异或值的最大值最小。贪心地从最高位开始考虑,然后在 01Trie 上神奇分类讨论。操作增长速度最快,发现是斐波那契数列,一开始想的是构造数列的前两个元素,于是套了个 exgcd 求最小整数解,然后错完了。一定会取到最优解,从小到大排序,求个后缀和,分成。的项的和,交替过程中预判和讨论一下是否需要插入。操作进行微调,发现在交替过程中插入一个。个元素,是正是负,再设一个。
2024-10-25 15:30:00
960
原创 2024 信友队 noip 冲刺 10.1
给定一个长度为n的数组aQ次询问每次询问给出LR,求所有LR的子区间lr满足从al到ar中至少分别有一个奇数和一个偶数。nQ≤5×105。这题的部分分高达90pts,一个OnQ的暴力和一个至多一个奇数或一个偶数的特殊性质。暴力就考虑对于i∈LR,以i为左端点的区间有几个,可以发现若i为奇数那么左端点必须在一个偶数之前,i为偶数同理。暴力就做完了。特殊性质分显然左右端点必须在那个特殊数字的左右两边。
2024-10-25 11:07:13
997
原创 2024 信友队 noip 冲刺 8.31
赛时打了个看起来很假的 O(n2)O(n^2)O(n2) dp 拿了 40pts40\mathrm{pts}40pts:令 f(i)f(i)f(i) 表示使 [1,i][1,i][1,i] 合法的最小操作数量,转移时考虑把之前某个操作延长到自己使自己可以少操作几步,对于中间的部分直接按照不考虑时针转过头的情况计算最小步数。一开始打的暴搜根本跑不出来。同机房 AC 的非常玄学,挂的也非常玄学,令 f(i,j)f(i,j)f(i,j) 表示先使第 iii 个钟转了 jjj 次,然后再考虑合法的最小操作数,
2024-10-25 11:01:56
957
原创 2024 信友队 noip 冲刺 8.29
由于每个点连出去两条边(正反各一个数字),最终的图一定由若干个不相交的环组成,环与环之间独立,只需计算每个环的答案然后乘起来即可。注意到环的答案只与环的大小有关,设大小为。等情况除外,特判即可),因为删掉一个元素后立即会出现两个相邻且相等的数。,我们将它所在的两张(或者一张,此时为自环)卡连一条边。对于建出的图,边代表数字,点代表卡牌,的限制,我们找到一段后缀,使得后缀和除以后缀长度最大,然后把。的答案都能取,维护一个前缀和即可。的数则之后的答案将这个数的后一位视为。为状态的 dp,发现会重,糖丸了。
2024-10-25 10:59:34
857
原创 【经验】C++ 算法竞赛代码技巧
使用namespace封装一个模块,如和。使用引用x中y元素。可以把using ...直接写在namespace的右大括号后面而不是单独占一行。使用来快速打开输入输出文件,若要打开sample.in和sample.out那么写一个不需要加引号即可。使用在控制台而不是终端输出你的程序运行时间。在你开始创建数组等元素前定义一个bool类型的变量,如;在main函数之前再定义一个,这样你就可以通过输出内存大小。在调用类似于init的初始化函数时,可以在定义完init后写一个完成调用。对于。
2024-10-03 09:57:24
842
原创 Day4 平衡树 & 线段树
满足左子树权值比自己小、右子树权值比自己大(感觉操作很像线段树/树状数组上二分)rank(x)xxkthkrank(x)需要支持插入/删除元素cnt如果树构成一条链那么就会退化成On的操作复杂度。由此出现了。
2024-08-29 16:38:36
761
1
原创 Day3 二分图 & 网络路
可以考虑(即一条边两边端点颜色不同)和转化成二分图的模型。匹配:选择若干条边使得每个点周围至多只有一条边被选。最大匹配:最多的边。增广路用于将匹配边替换为一些当前可能更优的非匹配边,增广路中匹配边与非匹配边交替出现。:bfs/dfs,从每个点出发找增广路,找不到了就得到了极大匹配,即最大匹配。n。
2024-08-29 16:36:58
1007
原创 浙教版 七年级下册 科学复习干货
光源:能发光、正在发光的物体。分为自然光源(太阳)和人造光源(电灯)。直线传播:光的传播不需要介质。在同种均匀介质中沿直线传播。直线传播的表现:影子(日食、月食)、小孔成像光速V光3×105kms3×108msV_光=3\times 10^5km/s=3\times10^8m/sV光3×105kms3×108ms。光年:光在一年中传播的距离。约等于9.46×1015km9.46×1015km。一个物体。
2024-06-23 18:35:32
1269
原创 2024信友队春季 Day3 二分&分治
也叫折半搜索,用于在一个数组中查找某一元素的算法。给定一个长度为n的从小到大排列的数列a和q次询问,每次询问给定x,查找x 在数列中的位置。nq≤106。对于ai,如果xai,因为a有序,则xain;同理如果xai,则xa1i。然后就可以二分了。令lr表示x可能的区间,每轮求出一个mid2lr,如果xamid则mid即为答案;如果xamid则区间被缩短为lmid−1;
2024-06-22 11:44:10
903
原创 题解:P3569 [POI2014] KAR-Cards
完全可以把交换操作看作两次单点修改,每次只需要考虑一个元素的变化对答案的影响即可。对于一个区间中的元素,显然开头的数越小,该区间能够单调不降的概率越大。次操作,每次操作会交换两个元素的位置,且都需要回答:是否存在一种方案,使得每个元素各选择一个权值后,组成的序列从左到右单调不降。维护这两个值(直接存末尾卡牌选择的值)。在建树、修改的时候用子区间信息进行更新。合并两个相邻区间的信息时,我们枚举左区间。末尾选择的数尽可能小。最终该区间的末尾取决于。,考虑线段树,对于区间。,两个子区间的编号为。
2024-06-22 11:42:54
976
原创 题解:CF1019D Large Triangle
条连线按照斜率从小到大排序,然后从小到大枚举,这样任意两点旋转后的横坐标大小关系恰好会变化一次。枚举连线的过程中每次交换两个端点,再在连线的两侧(正负)进行查找即可。个点,海伦公式判断面积是否相等。优化思路即为:对于先枚举的两个点。个点使得它们组成的三角形面积为。就要满足其到这条连线的距离为。个平面上的点,求是否存在。的距离有序,那么就可以。的复杂度二分了,分成在。考虑将所有点进行旋转,使。需要输出三个点的坐标。然后做法就出来了:先把。之上、之下两个部分。
2024-06-22 11:40:43
951
原创 P4097 【模板】李超线段树 / [HEOI2013] Segment 题解
这样我们就完成了对完全覆盖的区间的修改。对于其他部分覆盖的区间直接递归左右儿子解决即可。对于查询操作,将自己的答案与左右儿子取个。左右的区间另称为左/右区间),可以发现一定有一个子区间被左或右区间完全包含(浅蓝色被右区间包含),即在两条线段中,肯定有一条线段。我们考虑线段树上被两条线段完全覆盖的一个部分为。)先被加入,显然整个线段在当时就是最优的;因为每次修改操作都需要递归左右儿子,所以加线段的复杂度是。此时深红色的部分没有受到影响,只可能成为右区间最优的线段)。其中,红色线段(记为。
2024-05-26 09:48:57
656
原创 题解:CF1016E Rest In The Shades
预处理出挡板长度的前缀和统计这个点的贡献即可。处于阴影中的总距离(深红色线)。的连线被某个挡板相交或接触时,我们说。移动过程中处于阴影内的总时间。个平面上的点,求出这些点在。不相交、不接触的挡板,第。中挡板的占比后,就可以通过。坐标排序,两次二分求出。(灰色、青色部分)求出。
2024-05-26 03:30:00
379
原创 题解:CF1370F1 The Hidden Pair (Easy Version)
你可以向评测机询问一个点集,评测机会回答点集中与。的点集,按照上述两种情况二分,最终可以得到深度较大的。距离和最小的点,以及这个距离和。实现没什么难点,注意每次询问/回答都要。每一轮都询问一次深度为。对于第一种情况询问到的点都可能是。个点的树,需要得出树上两个点。个点进行询问,这样就可以得到。为树根,那么对于树中深度为。之间的距离,和一个必定在。中深度较大的点,不妨令。为树根,然后询问深度为。考虑二分,区间下界为。的点集,得到的点即为。
2024-05-25 20:29:01
408
原创 题解:CF1370F2 The Hidden Pair (Hard Version)
你可以向评测机询问一个点集,评测机会回答点集中与。的点集,按照上述两种情况二分,最终可以得到深度较大的。距离和最小的点,以及这个距离和。实现没什么难点,注意每次询问/回答都要。每一轮都询问一次深度为。对于第一种情况询问到的点都可能是。个点的树,需要得出树上两个点。个点进行询问,这样就可以得到。感性理解一下,因为我们要处理出。为树根,那么对于树中深度为。较深的一个点,所以深度小于。之间的距离,和一个必定在。的点都不会是那个较深的点。中深度较大的点,不妨令。为树根,然后询问深度为。的点集,得到的点即为。
2024-05-25 20:28:05
451
原创 题解:P9535 [YsOI2023] 连通图计数
时的树,树的数量也相同。现在考虑这挨在一起的两个环的方案。我们可以将这两个环拆成类似韦恩图的样子,分为左边环独有部分、左右环公用部分、右边环都有部分三条链。中挑两个点出来,之后的每个点都选择两个位置放在中间,不合法数量(即之后的所有点全都放在一条链上)即为。在树中无连边(即两个环没有公共点,否则就变成一个环了)。次,考虑到两个环位置可以调换但属同一种情况,所以答案要除以二,即为。区别在于,此时只能算出两个环的大小之和,答案类似,即。使用容斥,所有合法的树的数量等于所有减去不合法,即为。
2024-05-25 20:27:27
312
原创 2024信友队智灵班春季 Test1 总结
则它们会被一起删除,环会重新接上,这个过程一直重复直到不存在可以删除的元素。这很好想:如果某一时刻还剩下的元素没有被湮灭完,那么此时加入肯定会代替后面的某个元素进行湮灭操作。个打开,如果没有看见自己编号的纸条则所有人都将被处决。计算时从右往左计算(矩阵乘法的结合律),可以降低每一轮乘法的时间复杂度。压根不觉得这个提示是最优策略,以为只是针对于该样例而言可能的一个策略。号盒子,然后根据看到的纸条编号打开对应编号的盒子,直到。),宗旨即为:构造一个答案矩阵和转移矩阵,通过转移矩阵的。的值,则转移矩阵也相同。
2024-04-20 08:31:24
2064
原创 [CF825F] String Compression 题解
其中出现循环的子串压缩后长度为:循环节出现次数十进制下的位数+循环节长度,无循环的串也需要压缩。求压缩后的最小长度。这个部分完全压缩后的长度,求法即为:对于每个。分成若干个子串,这些子串全部完全压缩。,注意判断是否能够整除。中无小的循环节(即循环节长度为。个字符进行压缩的最小长度。个字符删除后跑 KMP,求得的。,对其执行 KMP 算法后得到。数组,可能的最小循环节长度。串进行压缩可以认为是把。
2024-04-11 18:55:33
1004
原创 Day2 字符串哈希&KMP
将一个字符串转成一个数字,可以快速比较两个字符串是否相同等。要求为:相同字符串哈希值相同,不同字符串哈希值尽量不相同。映射方法通常采用多项式哈希方法,很像进制转换。假设字符串为 SSS,其哈希值为 f(S)f(S)f(S)。定义一个小的正整数 basebasebase(比如说 27,13127,13127,131),表示将 SSS 视为 basebasebase 进制下的数字。将字符串中涉及到的每个单独的字符 SiS_iSi,转换为一个数字 xix_ixi(比如说 a\texttt{a}a 为 000,
2024-04-10 21:35:22
1316
原创 Day1 省选衔接题 思路总结
在任意一种分隔方案中,都一定存在一种矩形放置顺序,使得每次放置之后,分界线仍然是单调的。所以即使是仅考虑单调的分界线状态,也一定可以搜索到所有状态,这样可以简化状态降低复杂度。然而这样复杂度仍然较高。
2024-04-10 21:19:58
897
原创 P4784 [BalticOI 2016 Day2] 城市 题解
边权非负,显然最终选择的边组成一棵树,否则去掉环上一条边后答案更优且不影响连通性。于是本题转化为最小斯坦纳树的模板题,纯粹的模板题在。就可以作为第二种情况的一个起点。每一轮都以这些有值的点为可能的起点跑最短路即可。对于第一种情况,因为我们按照二进制思想压缩状态,所以对于状态。前者直接循环计算,后者可以用类似于最短路的松弛操作计算。点两两可达的情况下选择的边边权和的最小值。条边的无向图,边有正边权。个点被包含)时的答案。,如果在第一种情况的转移完成后,,即连通自己不需要连其他边。个点连通的最小斯坦纳树。
2024-03-24 20:13:29
1075
1
原创 最小生成树 算法解析+例题
给出一张n个点m条边的无向连通图G,每条边uv有边权wuv。顾名思义,在G的所有生成树中找一棵边权之和最小的树,这棵边权和最小的树就被称为G的最小生成树 MST(记为T生成树即为在G上的m条边中选择n−1条边将所有点连通组成的树。
2024-03-24 13:50:37
1019
1
原创 P3639 [APIO2013] 道路费用 题解
最小生成树中这个连通块的部分选择的边就是不变的。所以我们就可以把这么多个连通块缩成一个点,每次跑最小生成树就不再需要考虑这个点的内部边的情况了。中的哪几条边最终被放进了最小生成树中,然后算出这几条边边权最多可以取多少,使得这些边全部都在树中。 条边的边权,使得这些边产生的贡献最大,求这些边的贡献之和。中边的贡献,所以每个连通块内部的边的贡献是不重要的,只需要记录连通块内点的点权之和。中的边后再加的边就是组成连通块的边,对于这些边在合并完。中的某几条边不在最小生成树上,那么说明有更优的。
2024-03-20 21:32:32
1004
1
原创 P2934 [USACO09JAN] Safe Travel G 题解
假设需要经过两条及以上的非树边,那么总是有至少一条非树边可以用几条树边拼起来(否则这条非树边就应当是树边)。可以脑补一下走多条非树边的情况,一定存在一个更优的只走一条非树边的路径。个人认为这个并查集更像是记录每个点最近的没被计算过贡献的祖先,加快了在环上跳的过程;从小到大进行排序,每次遍历一遍环上没有被确定答案的点并更新答案,这样可以保证每个点被最优的非树边计算答案,不会重复计算。在环上的点的答案被更新以后,我们把它们全部归到一个并查集里,根节点为。,如果将其加进最短路树中,则会产生一个环,环上的点为。
2024-03-18 21:29:45
956
1
原创 最短路 算法解析+例题
最短路可以认为是图论最基础的内容之一,涉及到的算法也很多。为了方便,假设图有 $n$ 个点,$m$ 条边,$(u,v)$ 这条边的边权用 $w(u,v)$ 表示。### 性质有几条关于**边权为正**的图的最短路的性质:- 任意两点之间的最短路,不会经过重复的点和边。- 任意两点之间的最短路,结点数不会超过 $n$,边数不会超过 $n-1$。对于前者,由于边权为正,如果一条最短路需要经过重复的点或边,更优的做法显然是在**第一次经过这个点或者边时**
2024-03-14 21:04:10
2397
1
原创 倍增法/st表 算法解析+例题
倍增,顾名思义就是成倍的增加。主要思想就是将问题的大区间分成 $\log n$ 个小块,每个块的长度为一个尽可能大的二的整数次幂,对于每个块用类似动态规划的方法 $O(n\log n)$ 预处理出来这部分的信息,最终用这些小块整合成大区间。能够把 $O(n)$ 的时间复杂度降到 $O(\log n)$。以一个经典的问题入手:> 给定一棵树,若干组询问求 $u,v$ 的最近公共祖先,即 `LCA`。倍增法求 `LCA` 的基本流程:- 预处理出第 $i$ 个点往上跳 $2^j$ 次能跳到
2024-03-11 18:41:26
1393
1
原创 并查集 算法解析+例题
本质是一个森林,相同集合的元素属于同一棵树中。初始时每个点都是一棵树,自己即为根节点。对于前者,在实现上判断两个节点所在树的根节点是否相同。,即在查询的过程中直接将自己的父亲设为根节点,可以缩短查询需要往上跳的距离。对于后者,将其中一个节点所在树的根节点的父亲设为另一个节点所在树的根节点的儿子。,也叫,即总是将节点数少的、深度小的树的根节点的父亲设为另一个根节点,也是缩短了查询时跳跃的距离。在同时使用路径压缩和启发式合并之后,每个操作的平均时间复杂度为Oαn)),其中αn。
2024-03-06 19:43:26
2092
1
原创 P5629 【AFOI-19】区间与除法 题解
的性质,才可以用两段有重复部分的区间信息合并出大区间的信息。也就是说,它们都可以用相交的两区间的并,推出大区间。进制下为自己的前缀,则后面的求解中肯定会使用前者而不是自己,此时就可以直接退出了。进制下位数越少的原数,它能消除的数越多。并向下取整后与一个被称作“原数”的数相等,则说这个数能被这个原数消除。中的数用了哪些原数去消除尽可能多的元素,最后也就可以。,如果在插入过程中发现了一个原数的结尾,即有一个原数在。我们把所有的原数按照。,这提示我们可以把原数的使用信息用一个。的询问,求在用原数尽可能多的消除。
2024-03-04 20:47:13
2350
1
原创 P4082 [USACO17DEC] Push a Box P 题解
很显然重点落在箱子而不是人的移动上,但箱子的移动依赖于人的移动,人的移动又受到箱子的阻挡。在靠近到箱子的四周时才会对箱子的位置造成影响,所以判断状态是否已经入过队,我们只需记录箱子的坐标和。一个人能推动地图中的箱子,当且仅当他在箱子旁边,且箱子在按照人向箱子移动的方向移动一格后不会卡墙里或。的上面把箱子往下推,则必须有一条不经过箱子的路径使得。的左边把箱子往右推,则没有不经过箱子的路径使。在不经过箱子的情况下,能到箱子上下左右的哪里。的另一面去推动箱子而不使箱子移动,当且仅当。在箱子的哪一面即可。
2024-03-03 20:39:39
924
原创 拓扑排序 算法解析+例题
拓扑排序,一般指在一个DAG(有向无环图)中将顶点排序,使得对于图上任意一条有向边uvu在拓扑排序后在v的前面。这个排序的结果称为拓扑序。显然拓扑序一般不唯一。因为拓扑序满足后面的点不会对前面的点产生依赖,所以经常和动态规划结合在一起使用,保证后面的点不会影响前面已经计算过贡献的点。一张图存在拓扑序,当且仅当这是张DAG,所以一个常见的套路就是:先对原图进行缩点,然后用拓扑+动态规划等统计答案。拓扑算法基本流程:记录图中每个点的入度d,将入度等于0的点入队。每次取出一个队首u,将每一个与。
2024-03-03 11:02:49
1451
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人