- 博客(143)
- 收藏
- 关注
原创 团体程序设计天梯赛-练习集 L2-030 冰岛人(森林+LCA)
明确给出父亲名字m / f:只能确定性别,父亲未知👉 每个人最多一个父亲,这是树结构的核心特征。有些人是“起源人物”(无父亲)不同家族之间互不相交多棵树组成的森林。
2025-12-13 17:41:55
773
原创 团体程序设计团体赛-练习集 L2-029 特立独行的幸福
这题题意是要求筛选出在一段有限区间内不依附于该区间其他数的幸福数。我们可以用欧拉筛筛选出素数,然后深搜记忆化数组维护搜过的幸福数。
2025-12-01 09:52:07
106
原创 团体程序设计天梯赛-练习集 L2-028 秀恩爱分得快
摘要:该代码解决了一个处理人际关系亲密度的模拟问题。通过二维数组存储双向关系值,首先处理输入编号(区分性别标记),然后计算不同性别人员之间的亲密度。最后判断给定两人是否互为最亲密对象,若不是则输出各自最亲密对象列表。关键点包括性别标记处理、亲密度计算和结果判断输出。
2025-11-20 16:25:33
154
原创 1058. 股票买卖 V
摘要:本文提出了一种股票买卖问题的动态规划解法。使用三种状态表示:dp[i][0]表示当天无持股且未卖出,dp[i][1]表示当天持有股票,dp[i][2]表示当天卖出股票。通过状态转移方程计算每日收益:dp[i][1]可从继续持有或新购入转移,dp[i][0]可从保持空仓或冷却转移,dp[i][2]必须从卖出转移。最终取最后一天三种状态的最大值作为结果。该算法时间复杂度O(n),空间复杂度O(n),有效解决了带冷冻期的股票交易问题。
2025-11-20 16:24:04
114
原创 1057. 股票买卖 IV
我们只需要对当天持有股票和不持有股票进行分析就可以找到状态转移方程式了。昨天没有股今天依旧躺平,或者今天刚卖出昨天持有的股。三维状态机模型,类似背包模型的题目,就是选与不选的题目。昨天持有的,或者今天买入的这两种状态。我们记得要对dp初始化为-0x3f为不合法。然后每天我们从大到小枚举交易次数即可。
2025-11-20 15:21:21
107
原创 团体程序设计天梯赛-练习集 L2-025 分而治之
这题,只需要存个图,每个节点打上是否被摧毁的标记,然后遍历每个没被摧毁的节点,看他是否有相邻的没被摧毁的城市,如果有说明不是孤立无援,因此方案不合法,如果都没有就是合法的。
2025-11-17 09:00:01
116
原创 团体程序设计天梯赛-练习集 L2-024 部落
本题考察并查集的应用。使用并查集统计社交网络中的人际关系,通过维护连通块来判断两人是否在同一社交圈。初始化时,每个人自成一个集合。处理输入时,将同一社交圈的人合并到同一集合。最后统计总人数和连通块数量,并处理查询判断两人是否属于同一社交圈。时间复杂度主要由并查集操作决定,空间复杂度为O(N)。
2025-11-17 08:59:53
126
原创 团体程序设计天梯赛-练习集 L2-023 图着色问题
注意有环和多个连通块的隐藏条件,所以我们需要先记录每个点是否被搜过。此题是考察深搜的一道题,深搜每个点相邻的节点即可。
2025-11-17 08:59:42
123
原创 团体程序设计天梯赛-练习集 L2-022 重排链表
我们先顺序访问一遍题目给的链表,用数组存时间戳上的链表地址,然后按题目要求去构造,通过控制奇偶来进行构造新链表即可。这是一道模拟链表,给链表地址重新指向的题,考察对链表操作的熟悉使用。ac code + 注释。
2025-11-13 21:42:53
188
原创 团体程序设计天梯赛-练习集 L2-021 点赞狂魔
我们创建一个结构体,存储用户的不同标签出现的个数,和出现标签的总数。然后按规则先排不同标签个数大的在前,出现标签数小的在前就可以了。这题就是一个排序问题。
2025-11-13 21:42:33
171
原创 团体程序设计天梯赛-练习集 L2-020 功夫传人
一道dfs深搜模拟题,用结构体记录每个人的徒弟和功力值,倍率值。然后从祖师爷开始向下深搜模拟,遇到传道者返回值即可。
2025-11-13 21:42:08
152
原创 团体程序设计天梯赛-练习集 L2-018 多项式A除以B
所以我们每次找多项式被除数的最高位,然后算除数与被除数的最高位指数差和系数的倍数,来消去被除数的指数最高位。我们打个草稿,发现是多项式除数每次消去多项式被除数的最高位。
2025-11-13 21:40:23
161
原创 11. 背包问题求方案数
在要求是最大价值的前提下,所以我们使用01背包来求最大价值。但是这里要求求的是方案数,那么我们可以多开个方案数组去追踪每次找出最大价值时的方案数。倒序循环是 01 背包的基本操作,防止同一个物品被重复使用。第 i 个物品体积为 v_i,价值为 w_i。并统计达到最大价值的方案数(取模 1e9+7)。有 n 个物品和容量为 mmm 的背包。的前提下,使背包中物品的总价值最大;
2025-11-12 16:16:45
168
原创 P2014 [CTSC1997] 选课
我们判断出,如果将当前物品选中,我们可以留出k个空间来选择子树的合并的最大价值容量,然后枚举更新状态即可。这题的模型是一棵树,然后在树上选择一个节点时候,必须选择它的父节点。2,若u不被选,那么子节点全不能被选→在这种情况下,可设奉献为0。所以我们可以将它看作为一个有依赖的背包问题模型。1,若u被选择,那么我们可以考虑其子节点是否选。,合并子节点的结果到当前节点的背包状态中。我们的做法是:在每个节点 u,我们。就是选与不选的01背包+树形。将每节课的体积看作为1。
2025-11-12 01:20:54
253
原创 P1063 [NOIP 2006 提高组] 能量项链 【环链区间DP】
因为是区间dp,所以我们找一个中间值k作为两个区间的下一步操作的过渡边界,len从2开始往上枚举到n。通过读题和观察我们发现,每次两个区间操作的新能量为 b[l] * b[k+1] * b[r]转链就是在原数组上后面再拼一遍,即创建长度为2*n的数组b,和长度为n的数组a。然后将长度len从小到大枚举,然后枚举区间l,r和中间值k去状态转移更新即可。首先是个环,因此我们要将环转换为链。此题是区间DP很经典的一题。
2025-11-10 10:53:57
163
原创 洛谷P1364 医院设置
这题求每个点的子树深度*权重总和奉献。数据小时我们可以暴力解决,但是当数据大的时候我们需要想到一种O(n)的写法。我们可以用换根DP。先固定一个根算出其代价,再把根沿边“换到子节点”,用O(1)更新全图答案。整体O(n)
2025-10-31 16:12:18
247
原创 牛客连通性题集 可达性(Tarjan+缩点)
每个环看作一个分量,如果这个分量入度是0,那么这个环的每个点都能作为起点,但是题目要求从编号小的输出,因此我们用tarjan_scc将每个分量进行缩点,再从入度为0的分量去选编号最小的点即是该分量起点。如果说能作为起点的点在一个环里,我们就要先判环,把环中最小的编号点提出来。此题求一个最小的点集,从这些点集出发能到图中如何一个点,不包括点集内。所以我们不能直接将原图中入度为0的点加入点集,我们还需要考虑环中的。
2025-10-27 19:11:59
176
原创 P1020 [NOIP 1999 提高组] 导弹拦截(递增子序列LIS与RLIS的结合 + 二分优化)
因为每一发高度不高于前一发,因此到后面遇到个更高的导弹,我们就需要开设个新的导弹系统来击落。我们知道导弹在第一发之后发射的高度不再高于前一发的高度,因此很容易看出来是递增子序列。根据要求,求出两个值,分别为一个导弹系统最多击落多少个导弹,至少要布置多少个导弹。LIS和RLIS的模板题应用,此题数据大,只需要用到二分优化即可过题。
2025-10-14 11:39:19
201
原创 CF1979C Earning on Bets (1200+构造+数学推导)
我们假设可能投入的硬币总数是S,那么我们假设每个恰好要投 s/k 个硬币 那么此时1-n的s/k的总和就一定恰好小于S,这样,我们只要在s/k的基础上再加点硬币,也就是每个都超过s/k那么每个投入的硬币就一定严格大于S,前提是在恰好s/k个的时候他们的和不能是S。然后我们求lcm(k1,k2,k3..kn)然后对每个k分配数即可得到答案数组。
2025-10-11 17:57:41
266
原创 P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G(SCC+拓扑+缩点)
图说单向图,注意是有环图,所以这里我们需要做个处理,就是将每个环压缩成单个点,然后环与环之间是单向的,就是点与点之间是单向的,这是等价的。这题求的是被所有牛喜欢的牛的个数,因此就是求有一个点,任何一个点出发都能够到达这个点的,满足这种情况的点的总数。我们可以将环中每个点都映射成一个统一的编号,这里叫做SCC,用Tarjan算法实现。然后拓扑一下,从入度为0的点开始拓扑排序得到的最后一个。叶子节点,那这个点对应的环内牛的个数就是答案。ac code + 注释(AI帮打注释)理解了这一步就理解了SCC的核心。
2025-10-11 13:37:43
166
原创 P3384 【模板】重链剖分/树链剖分(HLD)
树链剖分是一种将树结构转化为线性序列的算法,通过两次DFS将树分解为重链和轻链,从而将树上的路径和子树操作转化为线性区间问题。第一次DFS确定每个节点的父节点、深度、子树大小和重儿子;第二次DFS根据重链划分将树节点映射到线性数组。通过线段树维护该线性数组,可以高效处理路径查询/修改和子树查询/修改操作。该算法的时间复杂度为O(n log n),适用于大规模树上操作问题。
2025-10-10 00:59:16
190
原创 CF1909B Make Almost Equal With Mod (数论,位分析)
这题我们可以想一想余数的本质是什么,如果k = 2时,是不是数组中同时有奇数和偶数就可以了?我们分析2会发现数在模2时,都会保留最低位的不变,那么模4就是最低两位不变。10001001010 % 10000 = 00000001010(最低四位不变)直到模出的最低m位的最高位有不同时,那模出来的一定有两个不同的数。
2025-10-05 23:50:11
191
原创 CF339D Xenia and Bit Operations (线段树维护异或)
分析这题我们发现,每次的数组长度都是2^n个长度,然后涉及到单点修改,整体求结果。毫无疑问很容易看出来是线段树。2,状态(用于决定上一级节点是用异或还是或)然后线段树模板写,改一下求和改为位运算即可。
2025-10-05 21:50:08
180
原创 一个简单的整数问题2(线段树+懒标记+区间修改)
这题设计区间修改与区间查询,可以用线段树 + 懒标记做。这题对于线段树来说是一道模板题,具体可以看线段树相关知识入门学习。
2025-10-05 03:11:00
128
原创 一个简单的整数问题(线段树)
其实很简单,我们只需要将维护的原数组变成一个差分数组,从1到idx的和就是idx当前在原数组中的值,这样我们用 线段树 就可以查询单点时查询1 - idx 内的和,就是idx的值。此题在线段树的基础上,上对区间进行加值,然后查询单个数。显然遇到这种数据很大的区间修改和区间查询问题我们第一个要想到的是 线段树/树状数组 来进行维护。这里设计到区间修改。我们想想,线段树/树状数组只能进行单点修改,那么我们怎么才能实现,区间修改呢?这里我选择线段树来维护。
2025-10-04 23:17:16
185
原创 ACwing 1172. 祖孙询问
然后我们遍历子节点,更新其深度,方便后面找公共祖先时平衡两节点的深度在同一个位置上。在dfs的过程中我们遍历的节点初始上一步的节点f[u][0] = father。首先我们找到根节点,然后从当前根节点往下dfs。我们一开始先平衡两节点的深度到达同一个位置。然后开始往上慢慢找第一个深度最大的不同节点,这样我们倍增出了关于当前节点的倍增父节点。然后再初始化后几步的节点。就能找到公共最近节点了。这题是公共祖先模板题。我们用倍增方法去写。
2025-09-29 12:41:34
136
原创 牛客训练题:小叶的巡查
我们可以从任意节点先dfs一次搜到树的直径的一个端点,然后再dfs一次,搜到的最远的那个节点与当前第一次搜最远的节点之间的路径就是树的直径了。所以我们用求树的直径的方法去求任意两城市的最大路径,其实这个最大路径就是树上两个最远的节点。这题是求任意一个城市到另一个城市的最大距离,那么我们就将这类问题抽象为一个树上问题。求任意两城市的最大路径,不就是求树的直径吗?我使用的是两个数组的树上DP方法。
2025-09-29 09:47:23
122
原创 团体程序设计天梯赛-练习集 L1-088 静静的推荐
然后那些没达标的,我们用map记录起来每个分数段有多少个,然后遍历,每次取min( y , k ),就是取比k少的就取原值(因为有k轮,筛选人数不足以到达k轮)首先我们筛选出分数大于175分的,然后PAT的分数达到s是一定会被推荐,所以先算进去。
2025-09-28 09:54:29
163
原创 团体程序设计天梯赛-练习集 L1-087 机工士姆斯塔迪奥
用两个布尔数组标记每行每列是否被攻击,然后再遍历一遍这个图,当前点不在被攻击的行/列上就计数。
2025-09-28 09:20:26
127
原创 团体程序设计天梯赛-练习集 L1-086 斯德哥尔摩火车上的题
利用题目规则,创建两个空字符串,然后按规则将字符串a和字符串b都变成新字符串。然后判断这两个字符串是否一样,一样就只输出一次,否则两个都输出。
2025-09-28 09:12:04
158
原创 团体程序设计天梯赛-练习集 L1-085 试试手气
从大到小给每个骰子前面每次都筛出没出现过的最大的数,打上标记,最后找出每个骰子前面没出现的最大的数即可。
2025-09-28 08:56:17
143
原创 团体程序设计天梯赛-练习集 L1-083 谁能进图书馆
为了保障安静的阅读环境,有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆,除非有 18 岁以上(包括 18 岁)的成人陪同”。现在有两位小/大朋友跑来问你,他们能不能进去?请你写个程序自动给他们一个回复。
2025-09-28 08:50:13
354
原创 团体程序设计天梯赛-练习集 L1-080 乘法口诀数列
这题我们直接模拟出当前数与前一位数的乘积,然后将乘积转为字符串,然后从高位到低位就是从前往后遍历一遍到长度n,输出模拟出的数组即可。
2025-09-28 08:44:03
131
原创 团体程序设计天梯赛-练习集 L1-079 天梯赛的善良
天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分。于是命题组首先将编程能力划分成了 106 个等级(太疯狂了,这是假的),然后调查了每个参赛学生的编程能力。现在请你写个程序找出所有参赛学生的最小和最大能力值,给命题组作为出题的参考。
2025-09-28 08:43:40
246
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅