题目列表

可按标题、OJ、标签和启发记录快速筛选题目解析。

共 2161 题
标题OJ题号标签难度最后更新原题
把每个竞争售价转成关于税收或补贴 k 的一次严格不等式,和目标价对应约束求交集后,直接取绝对值最小的整数解。
luoguP1023
模拟枚举分段函数思维
普及+/提高2026-06-20 09:42打开
先识别答案就是第 n 个 Catalan 数,再用质因数分解计算 C(2n,n)/(n+1),避免模数不一定是质数时无法直接求逆元。
luoguP3200
组合计数数学Catalan质因数分解线性筛
提高+/省选-2026-06-20 09:36打开
把题目的“更有趣”关系看成所有本质不同有序二叉树的全序,先按结点数分类,再递归计算同大小树中的字典序排名。
luoguP7118
递归组合计数Catalan排名
提高+/省选-2026-06-20 08:59打开
固定一个点后枚举它与谁配对,这条线会把圆拆成左右两个互不相交的子问题,于是得到标准 Catalan 递推。
luoguP1976
动态规划递推组合计数数学Catalan
普及+/提高2026-06-20 08:57打开
先识别出圆上不相交配对就是 Catalan 数,再用 Cn = Cn-1 * (4n-2) / (n+1) 的线性递推把 O(n^2) 优化到 O(n)。
luoguP1375
动态规划递推组合计数数学Catalan
普及+/提高2026-06-20 08:52打开
把操作过程抽象成还未入栈数量和当前栈大小,用记忆化搜索统计合法 push/pop 序列。
luoguP1044
动态规划记忆化搜索python
普及+/提高2026-06-20 08:48打开
把拿 50 元和拿 100 元的人分别看成前缀加一和减一,设 f(a,b) 统计剩余两类人数时的合法排队方案数。
luoguP1754
动态规划递推组合计数数学Catalan
普及+/提高2026-06-20 08:42打开
把红筹和黑筹分别看成左括号与右括号,用前缀差值 dp[i][bal] 统计合法前缀数量,再用高精度加法保存第 n 个 Catalan 数。
luoguP1722
动态规划高精度组合计数递推数学
普及+/提高2026-06-20 08:39打开
先把每种特产独立看成隔板法分配,再对空同学集合做容斥,枚举有多少人没分到东西并扣掉这些不合法方案。
luoguP5505
容斥组合计数数学推导隔板法
提高+/省选-2026-06-20 08:26打开
把空行、空列、缺失颜色都当成坏事件做三重容斥,固定保留行列和可用颜色数后,每个剩余格子独立贡献 avail 种选择。
luoguP6076
容斥组合计数数学推导网格
提高+/省选-2026-06-20 08:15打开
先写出原题的 O(nk) 计数 DP,再把状态改写成第二类 Stirling 数,最后用满射计数的容斥公式在线性预处理后求出 S(n,n-k)。
luoguP6162
组合计数容斥数学推导动态规划
提高+/省选-2026-06-20 08:03打开
先算每种做法任选或不选的总方案数,再按食材枚举严格多数者,用差值 DP 统计坏方案并从总数中扣掉。
luoguP5664
动态规划容斥组合计数计数dp思维
提高+/省选-2026-06-20 07:35打开
先预处理 4 种硬币无限使用时的完全背包方案数,再对每个询问用 16 个子集做容斥,扣掉任意一种硬币超上界的方案。
luoguP1450
动态规划完全背包容斥组合计数背包
提高+/省选-2026-06-20 07:22打开
先算完整 n×m 网格所有出生点对的曼哈顿距离和,再减去所有涉及障碍点的贡献,最后补回障碍之间被多减的一次。
luoguP6692
数学推导曼哈顿距离组合计数思维
提高+/省选-2026-06-20 07:09打开
先统计每个 t 的倍数里有多少齿轮,再用 C(cnt[t],k) 算 gcd 是 t 的倍数的方案数,最后按倍数从大到小容斥还原精确 gcd。
luoguP6298
数论容斥组合计数最大公约数思维
提高+/省选-2026-06-20 07:04打开
把每种金属在 k 个熔炉中的出现情况看成一个长度为 k 的 0/1 模式,合法模式有 2^k-1 种,总答案是 (2^k-1)^n。
luoguP8557
数学容斥快速幂思维
普及/提高-2026-06-20 06:57打开
先算总状态数 m^n,再减去所有相邻房间宗教都不同的安全状态数 m·(m-1)^(n-1)。
luoguP3197
数学容斥快速幂思维
普及/提高-2026-06-20 06:52打开
把每轮操作看成当前酒量加上 b 再对 a 取模,最小正体积就是 gcd(a,b),再用 exgcd 求 b·y-a·x=g 的最小正解。
luoguP1292
数论最大公约数思维
普及+/提高2026-06-20 06:42打开
付款方做有限硬币最少张数 DP,找零方做无限硬币最少张数 DP,再枚举实付金额取最优。
luoguP2851
动态规划多重背包完全背包单调队列背包
提高+/省选-2026-06-20 06:29打开
如果 n mod 1..m 没有重复,那么它们只能依次是 0,1,2,...,m-1,等价于 1..m 全都整除 n+1。
luoguP8807
数学数论思维
普及/提高-2026-06-20 06:22打开
设恰好 p 个人抽到最大记号数 t,则总记号数必须落在 [p t, p t + (n-p)(t-1)],找到合法 t 后再贪心构造。
luoguP7107
数学构造思维
普及+/提高2026-06-20 06:15打开
先预处理每个格子最近球员的到达代价,再把空球、控球和四个踢球方向建成 6 层状态图跑最短路。
luoguP5100
图论最短路网格思维
省选/NOI-2026-06-20 06:02打开
把原式改写成 |(a+bi)(p-qi)+(c+di)(r+si)|^2,在高斯整数环里用扩展欧几里得求 gcd 和贝祖系数。
luoguP6299
数论数学最大公约数思维
省选/NOI-2026-06-20 05:43打开
先用 exgcd 求 ax+by=-c 的一组特解,再把通解写成 x=x0+k·b/d, y=y0-k·a/d,把矩形范围限制都转成对 k 的区间约束,最后求区间交集大小。
luoguP2833
数论
普及+/提高2026-06-20 05:39打开
先用 exgcd 判断 ax+by=c 是否有整数解,再把通解写成 x=x0+k·b/d, y=y0-k·a/d,通过不等式求出正整数解对应的 k 范围。
luoguP5656
数论
普及+/提高2026-06-20 05:36打开
把两只青蛙第 t 次跳跃后位置相等写成 (m-n)t≡y-x(mod L),再用扩展欧几里得求最小非负解;若 gcd(m-n,L) 不能整除 y-x,则无解。
luoguP1516
数论
普及+/提高2026-06-20 05:32打开
把 ax≡1(mod b) 改写成 ax+by=1,用扩展欧几里得求出一组解,其中 x 在模 b 意义下的最小正值就是答案。
luoguP1082
数论逆元
普及+/提高2026-06-20 05:28打开
设 f[i] 表示杀死一只 i 号怪兽的最小体力,满足 f[i]=min(K_i, S_i+Σf[spawn])。先把法术攻击代价当作初值,再从已确定更小代价的子怪兽反向更新父怪兽。
luoguP4042
图论最短路思维
提高+/省选-2026-06-20 05:14打开
对每个城市分别维护“机器人最早能到城门的时间”和“所有前置发生器最晚被摧毁的时间”,城市真正被摧毁的时间是这两者的最大值,再用 Dijkstra 式过程按时间推进。
luoguP2446
最短路图论思维
提高+/省选-2026-06-20 05:10打开
把状态定义成“当前所在牧场 + 已改造道路数”。走一条边时要么正常付边权,要么消耗一次改造机会把这条边代价降成 0,在状态图上跑 Dijkstra。
luoguP2939
最短路图论
普及+/提高2026-06-20 05:04打开
把状态定义成"当前所在城市 + 已用卡数"。走一条边时要么正常通过,要么额外消耗一张卡把这条边代价减半,在这个状态图上跑 Dijkstra。
luoguP4822
最短路图论
普及+/提高2026-06-20 04:58打开
把每个关键交点拆成“横线状态”和“竖线状态”两个点;同一条线上的相邻关键点连边,换乘站内部连一条代价为 1 的边,再在这张图上跑最短路。
luoguP3831
最短路图论思维
提高+/省选-2026-06-20 04:52打开
按牧场过路费从小到大加入 Floyd 中转点,维护边权和最短路;每次加入新中转点后,用“边权和 + 当前允许最大点权”更新所有点对答案。
luoguP2966
最短路Floyd图论思维
提高+/省选-2026-06-20 04:47打开
先求出一条 1 到 N 的最短路。只有这条路上的边被封闭才可能让答案变大,因此依次禁用这些边并重跑最短路取最大值。
luoguP1186
最短路图论思维
普及+/提高2026-06-20 04:40打开
把已有电线当成 0 权边,把距离不超过 M 的点对当成可补的新边,在这张图上跑最短路求从 1 到 N 的最小补线长度。
luoguP2914
图论最短路
普及+/提高2026-06-20 04:33打开
先 Floyd 求每个连通块内任意两点最短路,再枚举跨块连边,用两端点到各自块内最远点的距离更新合并后的最小直径。
luoguP1522
图论最短路Floyd连通块
普及+/提高2026-06-20 04:25打开
先求出一条从 1 到 N 的最短路。只有这条路上的边加倍后才可能让答案变大,因此枚举这条路上的每条边临时加倍,再重跑 Dijkstra 取最短路增量最大值。
luoguP2176
最短路图论思维
普及+/提高2026-06-20 04:00打开
只需要比较两种送货顺序:PB->PA1->PA2 和 PB->PA2->PA1。图是无向图,因此求出 PB 到两点的距离和 PA1 到 PA2 的距离后即可直接取最小值。
luoguP3003
最短路图论
普及/提高-2026-06-20 03:53打开
所有奶牛都要判断能否在 M 秒内到达同一个目标点 1,所以只需从 1 号草地做一次 Dijkstra,再按奶牛编号检查距离是否不超过 M。
luoguP6770
最短路图论
普及/提高-2026-06-20 03:49打开
这是无权图单源最短路。先从 1 号点做 BFS,得到每个点的最短层数,再统计最远距离、最小编号和该距离出现次数。
luoguP2951
最短路图论bfs
普及-2026-06-20 03:45打开
这题不是最短路求和,而是最小化路径上的最大边权;点数只有 300,可以直接用 Floyd 的 min-max 转移求所有点对的最小瓶颈路。
luoguP2888
最短路图论Floyd
普及/提高-2026-06-20 03:33打开
牧场总数只有 52 个,把大小写字母映射成编号后直接 Floyd 求全源最短路,再在 A..Y 中找离 Z 最近的那头牛。
luoguP1529
最短路图论Floyd
普及-2026-06-20 03:29打开
往返距离等于 i 到 x 再加 x 到 i;原图从 x 跑一次 Dijkstra,反图再从 x 跑一次 Dijkstra,就能得到所有点的来回最短路。
luoguP1821
最短路图论
普及/提高-2026-06-20 03:25打开
标准正权无向图单源最短路,直接从起点 s 跑一次 Dijkstra,输出到终点 t 的距离即可。
luoguP1339
最短路图论
普及-2026-06-20 03:21打开
路线被强制经过 1 号牧场,所以先从 1 号点跑一次 Dijkstra,任意询问答案都是 dist[p] + dist[q]。
luoguP2984
最短路图论
普及/提高-2026-06-20 03:17打开
利用无向图距离对称性,从每个喜欢的牧场各跑一次 Dijkstra,把到所有点的距离累加后取总和最小的牧场。
luoguP2935
最短路图论
普及/提高-2026-06-20 03:10打开
路径加可以先做树上差分,再把子树和展开成 diff 的加权求和;结合 LCA、DFS 序和两棵树状数组,就能在线维护路径加与子树和查询。
luoguP3833
LCA树上差分树形结构
提高+/省选-2026-06-20 02:51打开
两点间最优通信稳定性等于所有路径中最小边权的最大值,这正是最大生成森林上的路径最小边权;先 Kruskal 建最大生成森林,再用倍增 LCA 查询路径最小边。
luoguP9235
图论并查集LCA最长生成树
提高+/省选-2026-06-20 02:48打开
对每个节点预处理根到它路径上的 depth^k 前缀和,再用 LCA 把路径拆成两段:sum(x)+sum(y)-2sum(lca)+depth(lca)^k。
luoguP4427
LCA倍增树形结构
提高+/省选-2026-06-20 02:44打开
商人的总路程就是从首都出发后,相邻两站之间树上距离的总和;用倍增 LCA 快速求两点距离,再顺着给定路线累加即可。
luoguP8855
LCA倍增树形结构
普及+/提高2026-06-20 02:40打开
把每台电脑的度数看成点权,询问就是树上两点路径点权和;预处理根到每个点的前缀和,再用 LCA 把路径拆成两段即可。
luoguP8805
LCA倍增树形结构
普及+/提高2026-06-20 02:37打开
一组员工都能被同一人管理,等价于这个人是他们的公共祖先;先求这组点的 LCA,再在根到该 LCA 的路径上取最大编号即可。
luoguP10113
LCA倍增树形结构
普及+/提高2026-06-20 02:32打开
封锁一个点后,真正新增损失来自它把图切成的多个连通块;用 Tarjan 求割点时顺手统计每个被切下来的子树大小,就能在线性时间算出每个点造成的访问损失。
luoguP3469
图论tarjan割点
提高+/省选-2026-06-20 02:28打开
把每个兴奋值看成一个状态值,若某个兴奋值 x 能选择一个结束兴奋值为 y 的游戏,就连边 x->y;某个游戏能玩两次,当且仅当它的 e_i 能回到某个整除 w_i 的同 SCC 状态。
luoguP5676
图论强连通分量tarjan
提高+/省选-2026-06-20 02:22打开
关键线路一定是桥;先用 Tarjan 找桥,再统计桥两侧是否都同时含有 A、B 两种服务,只要某一侧缺少其中一种服务,这条桥就是答案。
luoguP7687
图论tarjan割边
提高+/省选-2026-06-20 02:16打开
先把同高且连通的格子缩成强连通块,块间只能从高处指向低处,缩点后是一张 DAG,最少缆车数就是入度为 0 的块数与出度为 0 的块数的较大值。
luoguP1653
图论强连通分量网格
提高+/省选-2026-06-20 02:11打开
Tarjan 回溯时若树边 u-v 满足 low[v] >= dfn[u],说明 v 子树必须经过 u 才能连到外部,此时把点栈弹到 v 再加上 u,就得到一个点双连通分量。
luoguP8435
图论tarjan双连通分量割点
提高+/省选-2026-06-20 02:01打开
在无向图上跑一遍 Tarjan,若某个儿子 v 满足 low[v] >= dfn[u],就说明删掉 u 会让这棵子树断开;根节点还要单独判断子树个数。
luoguP3388
图论tarjan割点
普及+/提高2026-06-20 01:57打开
先用 Tarjan 找出无向图中的所有桥,再把这些桥删掉,剩下的每个连通块就是一个边双连通分量。
luoguP8436
图论tarjan双连通分量边双
提高+/省选-2026-06-20 01:49打开
把无向图做一遍 Tarjan,若树边 u-v 满足 low[v] > dfn[u],说明 v 子树回不到 u 及其祖先,这条边就是桥。
luoguP1656
图论tarjan割边
普及+/提高2026-06-20 01:41打开