随笔分类 -  题解

摘要:看到“没有就加上,有了就减去”,就应该可以想到异或操作;查询树上一段路径,可以直接树上差分。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define add(u,v,w) adds(u,v,w 阅读全文
posted @ 2025-07-07 16:35 XiaoZi_qwq 阅读(4) 评论(0) 推荐(0)
摘要:题目描述 一看 \(n\) 高达 \(2e5\),直接猜时间复杂度为 \(O(NlogN)\) 的算法。 环上问题,先破环为链。 我们可以考虑对于一个区间,它可以转移到左端点在这个区间内的任意一个区间,所以通过贪心的思想可以得到,我们肯定要取左端点最大的一个区间。 同时我们注意到,一个一个区间跳显然 阅读全文
posted @ 2025-07-07 16:30 XiaoZi_qwq 阅读(5) 评论(0) 推荐(0)
摘要:题目描述 一眼数位dp,预处理很简单,但是统计逆天。 启示:只要不TLE和MLE,不要嫌状态多/麻烦 #include<bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; inline int max(int x,int y){ret 阅读全文
posted @ 2025-07-07 16:30 XiaoZi_qwq 阅读(3) 评论(0) 推荐(0)
摘要:其中 \(n,m \leq 1e5\),\(MAXY \leq 1e3\). 注意到每个 \(i\) 只有一个对应的 \(a_{i-1}\),可以发现营地及其传送关系构成了一棵树;每一次询问相当于从书上一点一直跳到根节点,并更新路径上的点的被访问次数。 其次我们注意到,题目问的是 “编号不同” 的询 阅读全文
posted @ 2025-07-07 16:29 XiaoZi_qwq 阅读(8) 评论(0) 推荐(0)
摘要:其中,$n \leq 1e5 $ 看到题,没有头绪;用脑子思考后,没有头绪。因此抛弃脑子,直接打暴力。 通过暴力算法,我们可以发现,符合条件的排列数量一定是严格不上升的。 进一步研究发现:若 \([l,r]\) 不满足条件,则 \([l,r+1]\) 一定不满足条件。 下面是证明:已知 \([l,r 阅读全文
posted @ 2025-07-07 16:29 XiaoZi_qwq 阅读(6) 评论(0) 推荐(0)
摘要:其中 \(N \leq 1e18\) , \(T \leq 1e3\) 注意到用于凑数的是斐波那契数列,所以可以用于凑数的数字不超过 \(logn\) 个。 直接搜索,常规剪枝即可 启示:充分剪枝的前提下,可以使用 STL 容器进行记忆化 #include<bits/stdc++.h> #defin 阅读全文
posted @ 2025-07-07 16:29 XiaoZi_qwq 阅读(4) 评论(0) 推荐(0)
摘要:题目描述 一个很直观的想法是,只要植物的攻击力足以刚好打败需要攻击力最大的僵尸,那么此时的攻击力就是最小的攻击力。 对于每一个僵尸,有 \(\text{击败此僵尸需要最小攻击力} = \text{此僵尸及其之前的僵尸血量之和} \div \text{此僵尸到房子的距离}\)。 如果我们用 \(num 阅读全文
posted @ 2025-07-07 16:28 XiaoZi_qwq 阅读(5) 评论(0) 推荐(0)
摘要:刚看题先想暴力,枚举每一种加边,求一次直径,时间复杂度 \(O(N*M*(N+M))\) 但可以马上想到,加边前,答案为两棵树中较长的直径(记为 \(len\));在加边 \((u,v)\) 后,如果直径变化,那么新的直径一定包含新加的那条边;而且,我们在加边前可以预处理出每一个点可以延伸的最长链的 阅读全文
posted @ 2025-06-28 15:07 XiaoZi_qwq 阅读(8) 评论(0) 推荐(0)
摘要:首先,看到 \(n\) 和 \(m\) 的范围不大,而且没有什么很明显的头绪,考虑搜索 具体来说,从大到小枚举每一个卡片,对每一个人进行判断,看这个人能不能拿,能不能拿的判断依据是这个人剩余的数能不能整除卡片的编号 但是,直接这么搜索会TLE,所以考虑到剪枝。看到“整除”,就应该想到质因数分解。考虑 阅读全文
posted @ 2025-06-27 22:45 XiaoZi_qwq 阅读(10) 评论(0) 推荐(0)