08 2024 档案

摘要:原题链接 启发式思考 替换的过程,可以看成数组 A 内部的流动,既然是流动,我们可以用图来表示这种流动 经过样例测试发现,这样的图,每个节点最多有一个入度,但可以有多个出度,很像树,但是又存在环 感知一下,每一次替换,都是父节点的值赋给子节点,因此,k次替换后,该节点的值就是第 k 阅读全文
posted @ 2024-08-28 19:45 纯粹的 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 阅读全文
posted @ 2024-08-27 19:28 纯粹的 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 首先是朴素解法,每次遍历 n 然后查看 每个数的平方根是否是其前缀 时间复杂度 O(Tnlogn) 这里有两个数,一个是 x,即一个整数,一个是 y,是 x 的平方根,因此我们可以换一个视角. 统计对于每一个整数 \ 阅读全文
posted @ 2024-08-22 05:11 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 题意 对于有相同颜色传送门的城市 i,j,可以花 |ij| 的代价从 ijji 问从城市 xy 的最小代价,或者报告无法到达 分析 对于无法到达的情况,很简单,用并查集维护即可 而对于可以到达的情况,我们发现,两座城 阅读全文
posted @ 2024-08-21 04:53 纯粹的 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 什么情况下,答案为 -1 ? --两座城市没有任何直接或间接的传送门相连 所以如果我们把所有能通过传送门互相到达的城市放入一个集合,那么输出 -1 代表这两个城市不在一个集合里 不能相互到达的问题解决了,能相互到达的城市,cost 是多少? 阅读全文
posted @ 2024-08-20 22:01 纯粹的 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原题链接 题意 有两个数 a,b 每次可以拿走其中一个数的若干个质因子,请问恰好 k 次操作后能否使 a=b 分析 假设 a,b 最后到达的是 c ,那么 ac 的质因子个数加上 bc 的质因子个数一定大于等 阅读全文
posted @ 2024-08-15 22:29 纯粹的 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原题链接 这个题解写的很好 阅读全文
posted @ 2024-08-15 21:13 纯粹的 阅读(3) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 方法一: 双重循环, O(n2) 方法二: 顺序遍历 i,然后查找目前所有比 ai 小的数,这是一个比较经典的树状数组的运用 时间复杂度 P(nlogA) 考虑优化,由于 A 可以达到 1e8 ,而 n 只有 \(4e5 阅读全文
posted @ 2024-08-15 20:25 纯粹的 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 对于 ai,bi,如果存在一个 j,使得 aj[ai,bi],bj[ai,bi],则存在交叉点 即对于 [ai,bi] 这一匹配,其内部的点也必然一一匹配,否则存在一个匹配点在外面,会导致交叉 有点像括号匹配,我 阅读全文
posted @ 2024-08-15 20:00 纯粹的 阅读(3) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.暴力想法:维护n个集合,每次合并,遍历两个集合,最坏时间复杂度 O(qnlogn) 2.优化想法:两个集合合并后,我们只需要查询大集合的大小,因此,我们可以只遍历两个集合中较小的那个 然后莫名发现竟然过了,我们上网查了一下,发现这种方法叫做启发 阅读全文
posted @ 2024-08-13 21:25 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 根据哥德巴赫猜想,任意大于2的偶数都可以表示为两个质数的和 因此,对于大于二的偶数,总有办法拆成两个质数,也就是只需要交两元钱 如果是质数,只用交一元钱 如果一个数减二后是质数,也只需要交两元 否则交三元 code #include<bits/stdc++.h> using name 阅读全文
posted @ 2024-08-13 20:38 纯粹的 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 如果在升区间内包裹降区间,那么这个降区间是不合法的 如果两个升区间有重叠,那么这两个升区间将合并成一个大的升区间 这种合并的操作让我们想到了并查集,我们用并查集维护升区间,如果一个降区间内的点不属于一个集合,代表不存在一个升区间包裹了这个降区间 yes or no的问题解决了,如何构 阅读全文
posted @ 2024-08-13 00:26 纯粹的 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 比较套路化的处理,将后半部分翻转过来乘二,查看前半部分是否有匹配的地方 阅读全文
posted @ 2024-08-12 23:46 纯粹的 阅读(3) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 分类讨论 1.如果 ba 的倍数,答案为 b 2.否则,至少要经过两次转换,而 a 转换一次最少要花 ab 转换一次最少要花费 b ,所以,如果 a,b 有公因子,那么只需要两次转换 a+b 3.否则 阅读全文
posted @ 2024-08-12 23:29 纯粹的 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 方法1.遍历所有子集,查看是否合法 O(2nn) 方法2:观察到 ai70 ,而七十内的质数有19个,可以状态压缩dp code 阅读全文
posted @ 2024-08-12 15:10 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 方法1: 每次询问,每次遍历 O(qnlogn) 方法二:利用大随机数代表每个数,异或哈希代表每个数出现的状态 O(q+nlogn) code #include<bits/stdc++.h> using namespace s 阅读全文
posted @ 2024-08-12 00:06 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 多想几种暴力 1.遍历所有数对: O(n2) 2.求有多少数对其乘积为平方数 求有多少平方数能被数对乘积: O(n2) 3.如果两个数的乘积为平方数,代表他们的质因数,要么都是奇数,要么都是偶数 : O(?) 4.如果 \(a \times 阅读全文
posted @ 2024-08-11 22:53 纯粹的 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 比较套路性的题 由于 k10 ,所以我们可以建立分层图,第 i 层的点代表使用 i1 次免费航线后到达该点的最小花费 阅读全文
posted @ 2024-08-11 22:02 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 分析 很逆天的一道题 设 dp[i][j] 为到达第 i 个点的时刻 t 且满足 tmodk=j 的最小 t 则有答案为 dp[n][0] 更新也很简单,设当前点为 u,当前时间为 t 需要遍历的下一个点 v,则有 阅读全文
posted @ 2024-08-11 20:28 纯粹的 阅读(74) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 暴力想法: 每次枚举每次查询 O(qn) 进阶想法:对查询按 r 排序,用树状数组维护 [1,r] 内,该范围内每个数最后一次出现的位置 code #include<bits/stdc++.h> using namespace std; /* #d 阅读全文
posted @ 2024-08-11 17:09 纯粹的 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.题目要求我们最小化吃完食物时间的最大值,这给了我们一种二分的感觉。 2.假如给定最大值为 K,那么所有 y 对应的 x 都满足 xKy 所以,我们要安排 x,使得每个 x 阅读全文
posted @ 2024-08-11 16:27 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 异或就是不进位的加法,所以区间内,每一位最多只有一个一 暴力方法: 遍历每一位区间,查看异或和加和 O(n3) 前缀和优化: 找每个右端点合法的左端点 O(n2) 利用性质优化: 由于最多只有一个1,所以这样的左端点不会随着右端点的递增而递增 O(n) c 阅读全文
posted @ 2024-08-11 12:25 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 O(n3) 的暴力方法: 遍历所有区间,然后找出每个区间内的最小值 O(n2) 的暴力方法: 考虑每个点的贡献,往左扩展直至出现比其小,往右扩展直至出现比其小的 观察 O(n2) 的暴力方法,我们发现往左扩展和往右扩展相互独立 所以我们只观察往左扩展 ” 阅读全文
posted @ 2024-08-11 12:04 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 首先,假设当前 s(l,r) 括号序列为合法序列,则有如下几种情况: l+1==r () match[r]==l (...) match[r]!=l (...)...(...) code #include<bits/stdc++.h> using na 阅读全文
posted @ 2024-08-10 19:43 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 注意数据范围,设 dp[x][y] 为x只白鼠,y只黑鼠,A先手赢的概率 则每次选取要么A赢,要么B赢,要么都没有赢进入下一轮 code #include<bits/stdc++.h> using namespace std; /* #define int long long 阅读全文
posted @ 2024-08-10 16:22 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 分析 考虑两个点对 (a,b),(x,y) 如果点对 (a,b) 的路径与点对 (x,y) 的路径不存在共同的点,那么此时我们交换 a,x,则有点对 (x,b),(a,y) 此时两个点对的路径相交,且 \(dis(x,b)+dis(a,y)\gt d 阅读全文
posted @ 2024-08-10 15:32 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 总体上来讲,就是二分 x 查询 插入 l1 时有多少数小于等于 x,查询插入 r 时有多少数小于等于 x 然后减一减,看看是不是 小于等于 k1 我认为目前没有比ai讲的更清楚的了,请点击这里 code #include<bits/ 阅读全文
posted @ 2024-08-10 13:50 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 无论如何,首先头脑中要有一个甚至若干个暴力的方法非常重要 暴力方法1:每次查询,遍历一次怪物,每战斗 x 只怪物,等级+1,直到遍历到怪物 i 最坏时间复杂度 O(nq) 阅读全文
posted @ 2024-08-10 10:59 纯粹的 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原题链接 前情提要,结合原题解区的题解 题解 先简化问题,对于一对数 a,b,其中 ab,要使其差为 X 的操作数是多少? 分类讨论 1.如果 ba==X,操作数为 0(不操作) 2.如果 X<ba,操作数为 1(增加a或者 阅读全文
posted @ 2024-08-09 15:46 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 原题解区写的很详细,所以这里总结一下自己的语言 性质1.如果两个数组相等,那么两个数组的差分数组也相等 根据这个性质,原题就转换成了对数组 a 的差分数组操作(选取两个点 i,j 使 d[i]+1,d[j]1 或者 d[i]1,d[j]+1) 性质 阅读全文
posted @ 2024-08-09 14:21 纯粹的 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 建桥相当于把区间内的路合并起来,这引导我们用并查集维护 可是具体如何实现呢? 我们令桥内的所有节点的统一指向最右端点作为首领,然后对于桥内的所有小桥,每次更新完了之后往右边走一格 code class Solution { public: int fa[2000005]; int f 阅读全文
posted @ 2024-08-08 21:21 纯粹的 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 假如 b=2,则有 n2 个这样的数 假如 b=3,则有 n3 个这样的数 所以总共有 k=2log2(n)k 个这样的数 考虑去重 由于 \(\sqrt[3]{n}\le 阅读全文
posted @ 2024-08-08 16:57 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:该图中,最左端的点会重复更新其周围点 n 次,有 n 条边,所以最坏 n2 阅读全文
posted @ 2024-08-07 19:53 纯粹的 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 对于一段区间 [l,r] 我们可以在 r 的位置查询一次,然后利用差分的思想跑到l-1再查一次 虽然这样不行,但是可以先在 l1 的位置查询一次,然后再在 r 的位置查询一次,然后顺序遍历,每次遍历就把对应位置上的数激活,可以用树状数组 code # 阅读全文
posted @ 2024-08-07 18:56 纯粹的 阅读(32) 评论(0) 推荐(0) 编辑
摘要:原题链接 获取题意 1.只能传送一次。 2.走树边没有限制。 3.只能传送至非相邻节点 4.路径一定是如下形式: SxT 其中要么 xT 传送要么 Sx 传送 SxyT 其中 xy 传送 \ 阅读全文
posted @ 2024-08-07 15:34 纯粹的 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 假如不是环,你会做吗? 从左到右遍历 ii 棵树的放置只与前面一棵树有关,线性dp 而图一定长这样: 当第 n 棵树为 3 的时候,无论第一棵树是 1 还是 2(不能为3,因为3不会往上),都符合环的要求 1 同理 因此我 阅读全文
posted @ 2024-08-06 22:13 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 多想几个暴力 暴力1:每次询问,便对p跟随模拟 暴力2:预处理 dp[i][j] 代表 k=j,p=i 时的答案 暴力1的最坏时间复杂度: qn 其中当k,a很小的时候取到 暴力2的时间复杂度:kn 发现当 \(k\geq \sq 阅读全文
posted @ 2024-08-06 15:19 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 暴力做法 每次询问,遍历点 u 的相邻节点,打上标记,然后遍历 v 的相邻节点,查询被标记的点的数量为 k,答案为 deg[u]+deg[v]k,其中 deg[u] 表示节点 u 的度数 最坏时间复杂度为 O(qn)阅读全文
posted @ 2024-08-06 13:56 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 修改玫瑰 i ,对答案的影响是: 减去只有玫瑰 i 的区间,加上只有玫瑰 i 和另一个玫瑰的区间,加上 m 因此我们对每个玫瑰 i ,维护上述两个区间长度 由于每个玫瑰开花时间一样,所以我们可以用扫描线的思想,对所有区间的端点离散化排序,然后升序遍历, 阅读全文
posted @ 2024-08-05 11:53 纯粹的 阅读(16) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 很有意思的思想,一遇到括号就倒过来 code #include<bits/stdc++.h> #define ll long long #define lb long double #define lowbit(x) ((x)&(-x)) using namespace std; c 阅读全文
posted @ 2024-08-04 15:30 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 很抽象的建模,我一开始想的是韦恩图,然后韦恩图里选取 若干 个点,还要保证每个图都能选上,然后把韦恩图抽象成点,图中的点抽象成待匹配的点,然后就是二分图匹配了 code #include<bits/stdc++.h> #define ll long long #define lb l 阅读全文
posted @ 2024-08-04 12:39 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 割点的特性: 以 s 为根节点dfs,割点的dfn序小于 t 点,且在割点dfs之后 t 点才有dfn序 code #include<bits/stdc++.h> #define ll long long using namespace std; vector<ll> G[20000 阅读全文
posted @ 2024-08-04 11:17 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 如果某个半联通子图包含一个点,那么该点所在的强连通分量一定可以被包含进来,因此,我们可以对强连通分量缩点 缩完点之后最长链就是答案了 维护以每个点为首的最长链大小和个数 阅读全文
posted @ 2024-08-03 22:11 纯粹的 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 题目目的:建立一个最小生成树 那么直接按边权排序后合并就行了 啊!!!! 阅读全文
posted @ 2024-08-03 19:27 纯粹的 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 优秀博客 朴素贪心: 每次找一条路,易得一条路的最大流量为路径上的最小权值,因此多次bfs遍历找合法路径,然后dfs更新路径上的权值 缺点请看上面的优秀博客 因此建立反向边的作用,有点类似于二分匹配:这条路径的部分流量由我负责,现在你去负责其他路径 第一次学,还是有很多地方不懂 co 阅读全文
posted @ 2024-08-03 14:16 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 往无向图中添加至少几条边,使得图中包含奇数环? 注意是要添加少边,而不是使环小 讨论 1.0条 当且仅当原图中存在奇环,方案数为0 用bfs染色判断,即对于一个环,bfs一定会绕一圈该环,然后黑白染色判断奇偶即可 2.一条 当且仅当存在一连通图大小大于等于3 对于该连通图内,对方案数 阅读全文
posted @ 2024-08-01 20:44 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示