自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 区间dp,数据结构优化dp等6种dp,各种trick深度讲解

区间DP的核心思想是分治+合并。当我们面对一个区间问题时,可以将其分解为两个或多个子区间,分别求解后再合并。f[l][r]表示区间[l, r]的最优解f[l][r][k]表示区间[l, r]且具有某种特性k时的最优解表示区间两端状态分别为x,y时的最优解为什么枚举长度?因为我们需要保证在计算大区间时,所有小区间都已经计算完成。这是DP的无后效性要求。f[i][j]→f[i%2][j]降维打击:分析状态依赖关系,减少维度DP提高课到这里就真正结束了。

2025-09-22 21:51:17 2670 3

原创 题解:AT_abc424_f [ABC424F] Adding Chords

然后把两个点映射到区间,然后用线段树维护最小值和最大值。,这样肯定不会相交,就直接加上就可以了。如果要画的话,必须要求。

2025-09-28 22:08:48 152

原创 题解:AT_abc424_e [ABC424E] Cut in Half

首先肯定不可能用模拟做,因为k≤109。我们可以尝试二分长度为x的木棒,问题在于如何检查是否为x。我们可以尝试获取在最多只能切k次的情况下能获得多少根大于等于x的棍子。然后就很好统计了,我们只需要在他大于等于的时候一直除二然后计数就行了。那我们就计算长度大于等于mid的木棒和长度大于等于2×mid的木棒,超过了2×mid的显然应该算两次(因为还可以切成两根更小的,这样能保证正确),然后再加上初始就大于等于mid的木棒,这样就能精确的算出mid。

2025-09-28 22:08:15 303

原创 题解:CF251A Points on Line

的点数有多少(和上面的稍加优化里面的求法一样),假设点数为。个点,使得他们当中最远的两个点不超过。,然后答案加上这么多种方案就可以了。,是因为选出来的顺序不重要,比如说。首先得满足两个点之间的距离小于。),接下来二分最后一个小于等于。个点,如果最远的距离不超过。个点符合条件,然后答案加上。,那么根据组合原理,发现其有。发现只需要枚举出来一个点。,快了一点但是还是超时。是有从小到大有序的。,同样二分出小于等于。本质上是同一种方案。

2025-09-27 10:28:05 310

原创 at_abc354_c题解

给你很多卡,每个卡有一个强度和价格,每次选择两张卡片,如果一个卡片比另外一张强而且还有便宜一些,把另外一张卡片删除,求出最后剩下的卡片数量和集合,而且不存在相同的价格或者是一样强的卡牌。个当中的最大的,那么他肯定会被删除(因为他前面的价格都比他小,而且如果他不是最大值,那就会有一个比他强的,而且比他便宜,所以第。而且数据保证不会有相同价格的卡牌或者是相同强度的卡牌,所以不会出现前面某张卡牌的价格等于第。暴力,对于所有卡牌,直接枚举,如果发现出来一张比他强而且还比他便宜的卡,就删除,当然这样做肯定会超时。

2025-09-27 10:27:24 468

原创 at_abc376_d题解

直接建一个反图,然后对于反图正图都跑一遍最短路就可以了。的距离,把两个之加起来,在求出最小的和即可。很明显,我们可以枚举一个点,然后求出从。到这个点的距离和这个点到。至于如何求反过来走到。

2025-09-26 13:25:39 222

原创 at_abc376_e题解

考虑使用平衡树动态维护,定义一个变量。接下来的问题,就是最小化后面的。是有序的,所以说我们对于。时的最小,每次不断插入。名,那我们就把我们的。名的值,然后每次对于。

2025-09-26 13:24:22 453

原创 题解:P9097 [PA 2020] Elektrownie i fabryki

取最小,所以说对于这种满足特定条件求最小,我们考虑对。,我们发现可以用树状数组实现,我们得到这个最小的。个所需最少的边数,用了前缀和优化后时间复杂度。首先考虑用分段动态规划,令。即可,实现复杂度可以做到。离散化,然后每次查询。

2025-09-25 22:43:03 381

原创 题解:AT_abc401_c [ABC401C] K-bonacci

【代码】题解:AT_abc401_c [ABC401C] K-bonacci。

2025-09-25 22:41:57 340

原创 题解:AT_abc383_c [ABC383C] Humidifier 3

队列里,先把所有的加湿器的位置扔进去。然后拿出队列头部的东西,步数小于等于。最后数一下有多少个被染了色的就行了。

2025-09-24 13:17:09 424

原创 题解:CF300C Beautiful Numbers

检验是不是好数,不是,那就退出下一个。可以随意排放,剩下的位置全部是。接下来就成了一个方程,设。对上面的方程式乘上一个。的值,然后,答案加上。考虑枚举这个好数的和。首先有一个上下界,即。然后对于这个范围内的。

2025-09-24 13:16:04 373

原创 题解:SP10111 PARSUMS - Nonnegative Partial Sums

记录一下前缀和,用一个类似滑动窗口的东西求出这段里面的答案。可以考虑使用线段树实现,维护一个最小值计算即可。由于本题是一个环,显然复制两倍断环为链。首先容易想到暴力并得出暴力是会超时的。

2025-09-23 22:15:50 130

原创 题解:AT_abc206_e [ABC206E] Divide Both

那我们考虑直接用容斥原理减掉,最后就得到了要求的对数,注意这里。感觉是一道很有意思的容斥加一些其他东西的题。接下来我们考虑计算区间内最大公约数为。可以考虑统计所有区间内是。容易发现我们会算重,所以我们要减去。的情况,因为这种情况被算了两次。的倍数的数的个数,也就是。表示一个数,显然会多算。

2025-09-23 22:15:17 470

原创 题解:P13019 [GESP202506 八级] 树上旅行

注意到,我们可以使用类似重链剖分的思想,我们定义小儿子链为链上的每个点都是他父节点中编号最小的儿子构成的一条链,这样我们通过搜索就会得到很多条这样的小儿子链,记录一下小儿子链和上面的点信息。然后我们每次往下跳的时候只要找到该点属于的小儿子链然后往直接输出下跳。首先,对于向上爬的,考虑直接使用倍增记录祖先然后每次跳上去即可。关键是往下的怎么做。

2025-09-22 21:52:23 202

原创 题解:AT_abc417_f [ABC417F] Random Gathering

这让我们想到使用线段树维护每个点的期望值,对于每次操作求得 $l$ 到 $r$ 的期望值之和,然后除以 $r-l+1$ 得到新的期望值,然后再把 $l$ 到 $r$ 的地方全部覆盖为新的期望值,最后输出每个点的期望即可。另外注意本题分数不需要约分,因为反正都要对 $998244353$ 取模,分数约分会多一个 $\log n$,然后再加上线段树的大常数 $\log n$ 很有可能会导致超时。注意本题还需要求分数取模,所以说我们线段树上每个点都要维护成一个分数即可。

2025-09-19 00:15:00 732

原创 题解:CF2111D Creating a Schedule

然后可以考虑将 $a_1$ 和 $a_m$ 配在一起然后循环交替,然后再反过来把 $a_m$ 和 $a_1$ 陪在一起然后循环交替,这样就会得到 $2$ 组,然后以此类推,继续选择 $a_2$ 和 $a_{m-1}$ 直到数量够了为止(如果是奇数的话那么最后一组就只选一个)。$a_l$ 配 $a_p$,$a_q$ 配 $a_r$,其中 $a_l \le a_p \le a_q \le a_r$。考虑使用反证法,假设我们构造的方案不是最优的,存在一种更优的配对方式,使得总贡献更大。

2025-09-19 00:15:00 254

原创 题解:CF2075D Equalization

肯定考虑用二维 01 背包做,定义 $f_{i,j}$ 表示第一个还剩下 $i$ 个,第二个还剩下 $j$ 时的最小代价,那么 $f_{i,j}$ 很明显可以从 $f_{i-k,j}$ 和 $f_{i,j-k}$ 转移过来(前提是 $i$ 或者 $j$ 需要大于等于 $k$)。不过实际上存在一种情况,比如 $x$ 等于 $2$,$y$ 等于 $3$,那种情况下 $a,b$ 都等于 $1$,所以说我们往 $a,b$ 后面多考虑 $5$ 个即可。

2025-09-18 00:15:00 284

原创 题解:CF2093F Hackers and Neural Networks

我们肯定希望选择的字符串和目标的相似度尽量高,所以说我们假设选择的字符串和目标相同的字符数量为 $x$,那么答案就是 $n + (n - x) \times 2$。发现实际上我们先选择一个字符串,重复 $n$ 次让 $c$ 变成指定的字符串,然后每次清除掉一个点再找到任意一个那个点为目标值的字符串操作一次。首先可以先判掉无解,也就是所有神经网络的第 $i$ 个位置都没有 $a_i$。然后考虑有解的情况,先玩一下样例。

2025-09-18 00:15:00 283

原创 题解:AT_abc421_d [ABC421D] RLE Moving

如果方向不一样,就看当前位置差 $(\Delta x, \Delta y)$ 和方向差 $(v\_x, v\_y)$。- 如果方向一样,那么当前位置重合的话,这 $k$ 步里每一步都会重合,直接加上 $k$ 就行。处理完这一段后,把两个人的位置按方向乘以 $k$ 更新,然后减少段剩余长度,用完就换下一段。3. 两维都零,也就是方向一样,如果当前位置一样,那就连续 $k$ 步都碰上。2. 两维都不零,要保证横纵步数一样,而且在 $[1,k]$,才能碰上。这 $k$ 步里,两个人的移动方向都固定。

2025-09-17 15:48:23 1022

原创 题解:CF2127C Trip Shopping

枚举 $i$ 后然后在后面 $1000$ 个中选择 $j$,这样做十分正确,原因是你能构成最优的 $i,j$ 的差值 $a$ 一定不会很大,所以说几乎 hack 不掉。事实上 $k$ 次操作是吓人的,先手每次肯定选择一对 $i,j$ 使得后手任意交换后的答案尽量小,然后显然这一对 $i,j$ 是不会变的,因为你每变化一次 $i,j$ 答案一定小于等于原来的,所以说一直选定这同一对 $i,j$ 一定是对的。首先我们先把 $a_i > b_i$ 的 $a_i$ 和 $b_i$ 交换,这样肯定不影响答案。

2025-09-17 15:47:04 394

原创 一个高精度通用模板

我知道,很多人是有的,但是我认为我可以分享一下,有助于新人了解高精度。使用方法:可以像int一样使用高精度owl_num。目前已经支持基本运算符号,后续可能会补充。

2025-09-16 21:23:42 177

原创 一个我自己研发的支持k-th路径查询的数据结构-owl tree

由于本人水平有限,数据结构很多地方并没有优化,但是提出了一些思想,为了保证通用性,使用了英文。

2025-09-16 21:13:48 1422 2

原创 题解:AT_abc407_c [ABC407C] Security 2

令 $c = t \bmod 10$,如果 $c$ 小于当前的 $s_i$,那么 $t$ 就加上 $t-c$,否则就加上 $t-c+10$。那么我们考虑用一个变量 $t$,反过来遍历 $s$ 来求出集体加的最少次数。首先你至少要按 $s$ 的长度次按钮保证长度达到。最后答案就是 $t$ 加上 $s$ 的长度。首先直接用搜索做是会超时的。

2025-06-05 10:55:23 182

原创 at_abc404_g题解

可以考虑把原数组变成前缀和数组。令前缀和数组为 $s$,那么,可以找到 $s_{L_i-1}$ 和 $s_{R_i}$ 间的差为 $S_i$。接下来就直接按照这两个不等式关系建图,然后跑一次最短路检查有没有负环即可,最后得到的显然是负数,乘上 $-1$ 就可以了。有多个关系,考虑直接用差分约束来处理。题目要求一些区间里所有数的和相同。

2025-06-05 10:54:30 492

原创 题解:P2485 [SDOI2011] 计算器

考虑使用乘法逆元,除一个数等于乘上那个数的逆元,当 $p$ 为质数时,$x$ 的逆元为 $x^{p-2}$。快速幂,只需要把 $k$ 变成二进制即可实现 $\Theta(\log k)$ 的时间复杂度。计算 $x^{p-2}$ 也可以使用快速幂。只需要把给出的那些东西合并起来即可。本题是一个比较模板化的题目。

2025-05-03 07:37:28 503

原创 题解:P1054 [NOIP 2005 提高组] 等价表达式

我们可以利用这个性质,对表达式进行哈希,可以带入一些 $a$ 并计算它们的值,这里我选择的是从 $0$ 到 $10000$。然后我们可以利用表达式求值来计算每个算式带入每个 $a$ 的值,然后对于每个一个判断和原式的每一项都相等即可。本题会有很多多余的空格和换行(甚至有 ```\r```),需要判断。对于较大的 $a$,需要取模,因为可能会爆 $64$ 位整形。如果两个式子相等,那么对于任意 $a$,答案都应该相同。还需要注意括号不一定恰好配对。

2025-05-03 07:36:58 579

原创 题解:AT_arc093_b [ABC092D] Grid Components

然后,如果我们白色少了,那我们就在黑色区域上放上白色的,如果黑色的少了,那么就在白色区域上方(这里放的方法随便怎么样都可以,只要你放的那几个之间不能联通就可以了)。最简单的一种构造,就是直接在所有第一行到第五十行之间的行数是偶数,列数也是偶数的地方给他换一种颜色,后面那一半的也一样。所以说,我们可以先考虑构造一个上面一半白色下面一半黑色的矩形(这里直接给他弄 $100\times100$,无所谓)。首先,有一点很重要,构造的矩阵的两边必须小于 $100$。

2025-03-10 20:12:27 476

原创 NOIP2017提高组 宝藏

f[i][k] = min(f[i][k],f[r][k - 1] + cost * k/*代价*/);$f_{i,j}=min(f_{i \space xor \space k,j-1}+cost)$,其中 $k$ 为 $i$ 的子集。由于第 $j$ 层和 $j-1$ 层相关,所以说要去 $j-1$ 层 $k$。1.1 集合:所选点集是 $i$,树高为 $j$ 的方案的集合。对于任何一种树的形态,如果拿 $a$ 来算,只能拿 $j-1$ 层。

2025-03-10 20:11:35 467

原创 at_abc396_d题解

所以说我们可以直接枚举所有 $1$ 到 $n$ 的简单路径,取最小值即可。记得开 $64$ 位整形。注意到 $n$ 非常小。

2025-03-09 16:11:48 294

原创 at_abc396_c题解

然后,对于 $a_i$ 中的负数,我们要根据选择他后,$a_i+b_i$ 是否大于等于 $0$。首先,一个很显然的结论,$a_i$ 中大于等于 $0$ 的数一定要选。所以思路很明显了,可以直接排序后用双指针做。

2025-03-09 16:08:37 449 2

原创 at_abc373_d题解

然后就很好做了,对于这个系统,使用 spfa 做就可以了(不能用 dijkstra 是因为有负权边)。给定你 $n$ 个不等式,每个等式要求:$v_i-u_i=w_i$,请你输出任意一种构造方案。swap(a,b);//顺序反的,到换一下。spfa 里不能用栈而要用队列(因此挂了 $9$ 次)。

2025-02-24 06:56:55 563

原创 abc372_e题解

文艺平衡树](https://www.luogu.com.cn/problem/P3391),[并查集](https://www.luogu.com.cn/problem/P3367)。if (tr[root[pa]].cnt > tr[root[pb]].cnt){//优化。考虑维护 $n$ 个文艺平衡树,然后用并查集来维护那 $n$ 个文艺平衡树的合并。```2 x k```:询问所有和 $x$ 联通的点当中编号第 $k$ 大的点。```1 x y```:将 $x$ 和 $y$ 合并。

2025-02-24 06:55:33 429

原创 题解:UVA663 Sorting Slides

然后每次去暴力断边,每次断一条过后,去跑一遍二分图,如果剩下的的最大匹配不是 $n$,这条边一定是可以确定的边。虽然暴力并不是最优的,但是对于本题,$\Theta(n^4)$ 的时间复杂度不会超时。首先先根据能否被覆盖来建一个二分图。本题不能多输出或少输出空格和空行。很明显的二分图最大匹配。

2025-02-23 20:49:58 351

原创 题解:AT_abc254_f [ABC254F] Rectangle GCD

然后我们可以用线段树来维护 $a_i-a_{i-1}$ 和 $b_i-b_{i-1}$。

2025-02-23 20:49:20 360

原创 at_abc390_d题解

可以选择把一个袋子里所有球放到另一个袋子,求出结束后袋子所有球的和的异或和的值的不同数量。有一堆数,把他们丢到很多个集合,求所有方案下每个集合的和的异或和的数量。因为 $n$ 很小,所以说我们只需要用暴力搜索即可解决这个问题。但是请注意不要直接用系统自带的带排序集合,要用不带排序集合。所以说,问题可以转换为下面这样的。首先我们知道零是不影响异或的。也就是暴力枚举即可。

2025-02-21 12:40:37 432

原创 at_abc390_c题解

有一个矩阵,被黑色,白色,未定颜色的格子铺满,求能否把所有未定颜色的格子选上颜色,求能否让一块全是黑色其他都是白色的。所以说,我们可以发现,我们把黑色的最边上的轮廓找出来,如果哪个轮廓里面的全部是未定颜色的和黑色的就行了。首先最朴素的思路就是取枚举每个没有未定颜色的格子的颜色,但是时间复杂度的问题就不用说了。

2025-02-21 12:39:55 509

原创 at_abc392_f题解

然后对于和这些东西,我们用 ```pushdown``` 和 ```pushup``` 来更新,然后最后的询问当成单点询问和就行了。众所周知,```FHQ treap``` 是可以支持区间插一个数的,至于询问,我们可以在树上记录一个和。给定 $p$ 序列,要求将 $i$ 插入到 $p_i$ 个位置。这里提供一发 ```FHQ treap``` 的题解。//我是直接改的我维护数列的代码,非必要不要看这个代码。

2025-02-20 11:40:18 681

原创 题解:P7229 [COCI 2015/2016 #3] SLON

我们可以先计算 $x$ 等于 $0$ 情况下的值,这种情况 $kx+b$ 这一部分就只有 $b$,也就是我们得到了 $b$ 的值。然后我们在计算 $x$ 等于 $1$ 情况下的值,然后把两个式子消了,得到了 $k$ 的值。给定一个方程,求最小的 $x$ 使得方程在对 $m$ 取模的意义下等于 $n$。众所周知,由于题目保证是一个一次函数,所以说我们可以充分利用一次函数特性。有了 $k$ 和 $b$,那么我们解决这个式子就直接用扩展欧几里得了。至于表达式求值,该怎么做就怎么做。

2025-02-20 11:39:45 248

原创 矩阵Matrix(POJ2155)

给一个N*N的矩阵A,其中元素是0或1。A[i][j]表示在第i行第j列的数。最初时,A[i][j]=0(1<=i,j<=N)。我们以以下方式来改变矩阵,给定一个矩形的左上角为(x1,y1)和右下角为(x2,y2),我们对这个矩形范围内的所有元素进行“非”操作(如果它是一个'0',那么变化为'1',否则它变为'0')。用二维树状数组,每次区间增加1,然后单点查询每一个点对2取模的值。

2025-01-03 19:49:02 482 1

原创 奶牛排队(USACO 2007 January Gold)

从第N+2行到第N+Q+1行,每行两个整数A和B(1≤A≤B≤N),表示从第A头牛到第B头牛的范围。农民约翰列出了Q份名单(1≤Q≤200000)和每个奶牛的高度(1≤高度≤1000000)。从第2行到第N+1行,每行一个数字,表示第i头牛的高度(1≤height≤1000000);从第一行到第Q行,每行一个整数,表示从第A头牛到第B头牛之间,最高牛与最矮牛的高度差。在每天挤奶的时候,农民约翰的N头牛(1≤n≤50000)总是排成一列。第一行为N(1≤N≤50000)和Q(1≤Q≤200000);

2025-01-03 19:47:53 699

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除