题目列表

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

共 3718 题
OJ题号标题标签难度最后更新解析
RainboyOJ3063
自底向上 DFS 枚举每层的半径与高度,用剩余层的最小体积、最小侧面积和剩余体积的侧面积下界三重剪枝,把指数搜索压到毫秒级。
搜索DFS剪枝python
提高2026-10-07 13:50
RainboyOJ3062
回溯搜索 + 四条剪枝:只枚举总长的因数、降序先放长木棍、同层等长跳过、空木棒或恰好补满即回溯,求原始木棒最小长度。
搜索剪枝DFS
提高2026-10-07 13:50
RainboyOJ3059
在 DAG 上按拓扑逆序做位集合 DP:把每个点的可达点集压成一个 N 位整数,合并后继只需按位或,答案就是 bit_count()。
图论拓扑排序DAG位运算python
提高2026-10-07 13:50
RainboyOJ3061
把 16×16 数独的格、行、列、宫约束写成 4 类精确覆盖列,用 Dancing Links(Algorithm X)按最小列启发式搜索求解。
搜索深度优先搜索DFS精确覆盖Dancing Links
提高+/省选-2026-10-07 13:50
RainboyOJ3060
按重量降序 DFS 把每只猫塞进已租车或新开车,用「剩余最重的猫还得几辆」与现有空位下界、以及首次适应贪心初始解三重剪枝。
搜索DFS剪枝贪心python
提高2026-10-07 13:50
RainboyOJ3057
先把所有正段全部取上,再用二叉堆+双向链表的反悔贪心,以最小代价合并相邻正段或删掉正段,把段数压到不超过 M。
贪心反悔贪心二叉堆链表python
提高+/省选-2026-10-07 13:50
RainboyOJ3056
用大根堆 small 恰好维护当前最小的 p 个数、小根堆 big 存其余数,GET 时补齐插入并借/还平衡,对顶堆 O(M log M) 在线输出第 p 小。
二叉堆对顶堆数据结构
提高2026-10-07 13:50
RainboyOJ3053
覆盖条件可拆成行、列两个独立方向:最小公共周期 = 串长 - 最长公共 border,用 KMP 前缀函数取出各行/各列的 border 位掩码后按位与求交集。
字符串KMP周期python
提高2026-10-07 13:50
RainboyOJ3054
把 B 与 A 用分隔符拼成 B#A,一次 Z 函数即得 A 每个后缀与 B 的 LCP,再做长度直方图,每个询问 O(1) 回答;总 O(N+M+Q)。
字符串Z函数python
提高2026-10-07 13:50
RainboyOJ3052
最小表示法:双指针跳段比较 O(L) 求出循环串的字典序最小旋转,两个描述相等当且仅当最小表示相同。
字符串最小表示法
普及+/提高-2026-10-07 13:50
RainboyOJ3048
把矩形按底边分组:逐行维护每列向上连续 F 的悬垂高度,问题化为直方图最大矩形,用单调递增栈在弹栈时夹出左右第一个更矮位置,O(NM) 求最大面积再乘 3。
单调栈栈直方图
普及+/提高-2026-10-07 13:50
RainboyOJ3051
把探索路线当括号序列,用显式栈把每个子树折叠成排序儿子规范串拼接成的规范形,两串同构当且仅当规范形相同。
树的最小表示哈希栈
普及+/提高-2026-10-07 13:50
RainboyOJ3050
二维哈希匹配:行内用位串移位精确取 B 位窗口,竖向按 2^B 进制折叠对 2^61-1 取模 O(1) 滑动,询问指纹入集合,O(MN+QAB) 判定。
字符串hash哈希二维匹配python
普及+/提高-2026-10-07 13:50
RainboyOJ3049
以释放小根堆推进事件时刻,用地址升序的空闲块表做首地址最小的 first-fit 分配,配合队头优先的等待队列完成内存分配模拟。
模拟链表二叉堆python
提高+/省选-2026-10-07 13:50
RainboyOJ3047
用算符优先法(操作数栈 + 运算符栈)扫一遍表达式,靠栈顶优先级比较实现优先级、括号与左结合,并单独处理一元正负号和多余括号。
栈表达式求值字符串
提高2026-10-07 13:50
RainboyOJ3042
把所有数按 31 位二进制插入 01-Trie,再让每个数沿树逐位贪心走相反位;高位优先保证了贪心的正确性,总复杂度 O(31N)。
Trie字典树位运算贪心python
普及+/提高-2026-10-07 13:50
RainboyOJ3043
按过期时间升序扫描,用小根堆维护暂定要卖的商品:堆大小超过当前 d 就弹出最小利润,O(N log N) 完成反悔贪心。
贪心堆二叉堆python
提高2026-10-07 13:50
RainboyOJ3044
每轮只保留前 n 个和:在 A[i]+B[j] 行列单调的加法表上做 n 路归并,弹 n 次堆顶并按生成约定去重,总复杂度 O(mn log n)。
堆二叉堆多路归并python
提高2026-10-07 13:50
RainboyOJ3040
KMP 前缀函数一趟线性求出每个前缀的最长 border,最短周期即 i−π[i];π[i]>0 且 i−π[i] 整除 i 时即由该循环节整分,输出 (i, i/(i−π[i]))。
字符串KMP前缀函数周期python
普及+/提高-2026-10-07 13:50
RainboyOJ3039
用倍增法给所有后缀排序:每轮把「长度 2^k 的前缀排名」按两个关键字合并成 2^{k+1} 的排名,每轮排序都交给 numpy 向量化;再用保留下来的各轮排名表从大到小拼出相邻后缀的 LCP,得到 Height 数组。
python字符串后缀数组倍增numpy排序
提高+/省选-2026-10-07 13:50
RainboyOJ3036
把前缀查询倒过来做:先排序建成有序表,再从 i=n 倒推,每步用双向链表 O(1) 摘掉 A_i 并查询它的左右邻居,用三元组比较顺带处理平局规则,总复杂度 O(n log n)。
排序链表双向链表python
提高2026-10-07 13:50
RainboyOJ3037
把每片雪花的 12 种旋转写法规范化为最小表示,再用哈希集合 O(n) 判重,判断是否存在两片同形状的雪花。
哈希表字符串模拟
普及+/提高-2026-10-07 13:50
RainboyOJ3031
按字典序枚举前 20 个合法出栈序列:栈非空时「出栈」分支的结果恒小于「进栈」分支,故先出栈后进栈的 DFS 天然有序,收满 20 个即整树剪枝。
栈卡特兰数深度优先搜索剪枝python
普及+/提高-2026-10-07 13:50
RainboyOJ3035
三队列维护「未切 / 小段 / 大段」+ 全局偏移量消化集体加 q:每秒 O(1) 取出最长蚯蚓,把 O(m(n+m)) 的模拟压到 O((n+m)log(n+m))。
队列模拟
提高+/省选-2026-10-07 13:50
RainboyOJ3032
答案等于区间最小值乘区间长度;按柱子高度枚举,用单调栈在弹出时同时定出左右第一个更矮的位置,均摊 O(n) 求最大矩形面积。
单调栈栈
普及+/提高-2026-10-07 13:50
RainboyOJ3034
前缀和把子段和变成两数之差,固定右端点用单调队列维护窗口内最小前缀和,O(n) 求长度不超过 m 的最大子段和。
-普及+/提高-2026-10-07 13:50
RainboyOJ3028
把输入数按源进制读成数位数组,再反复对目标进制做长除法收集余数,逆序拼出目标进制表示。
进制转换高精度字符串python
普及+/提高-2026-10-07 13:50
RainboyOJ3029
枚举上下边界把二维最大子矩阵压成一维竖条和,用列前缀和加速求和,再用 Kadane 算法求最大子段和,总复杂度 O(N^3)。
贪心前缀和最大子段和
普及2026-10-07 13:50
RainboyOJ3030
DFS 按「先出栈、后进栈」分支天然按字典序枚举出站序列,收满前 20 个立即整树剪枝。
栈dfspython
普及-2026-10-07 13:50
RainboyOJ3021
正解是 Horn 的块合并贪心:反复把平均值最大的非根块并入父块,按对计费累加 total×size,并查集维护每块的点数与权值和,O(n²)。
贪心并查集树形结构python
提高+/省选-2026-10-07 13:50
RainboyOJ3026
环状均分糖果:设 c[i] 为 i-1 传给 i 的净流量,用平衡方程推出 c 是 a 减均值的前缀和,总代价为 Σ|c[i]-x|,排序取中位数即最小值。
贪心中位数数学python
普及+/提高-2026-10-07 13:50
RainboyOJ3027
把二维代价按 x/y 两轴解耦:y 取中位数;x 先排序让第 i 小的人领第 i 个格子,再对 x[i]-i 取中位数,两轴代价相加即答案。
排序中位数贪心
普及+/提高-2026-10-07 13:50
RainboyOJ3025
利用至多一个奇数位置的承诺,把破绽定位转化为前缀防具总数奇偶性的 0→1 阶跃,在阶跃上二分出翻转点,再单点计数组数得到件数。
二分前缀和奇偶性python
提高2026-10-07 13:50
RainboyOJ3022
用 13 个双端队列模拟牌堆:放到堆顶用 push_front、抽取堆底用 pop_back,每翻开一张就累加点数计数,最后数 A~Q 里凑满 4 张正面朝上的点数。
模拟队列python
普及-2026-10-07 13:50
RainboyOJ3024
二色最近点对:按 x 分治、上界下传,合并阶段在窄条内按 y 扫描并跳过同色点对,整数平方距离全程避免开方。
分治计算几何
提高+/省选-2026-10-07 13:50
RainboyOJ3018
把奶牛看成 SPF 轴上的区间、防晒霜看成时间点上的资源:按 SPF 升序扫描,用堆维护待选奶牛并按 maxSPF 从小到大优先满足最快过期的奶牛,得到 O((C+L)logC) 的最优解。
贪心堆排序python
普及+/提高-2026-10-07 13:50
RainboyOJ3017
校验值排序后两端反向配对可得闭式;固定左端点校验值随长度单调不减,倍增定位上界再二分求最长可行段,贪心切出最少段数。
倍增贪心二分排序python
省选/NOI-2026-10-07 13:50
RainboyOJ3019
把每个小岛能被雷达覆盖的雷达位置转成 x 轴上的区间,按右端点排序做区间选点贪心,无解当且仅当某岛纵坐标超过 d。
贪心区间贪心排序几何python
提高2026-10-07 13:50
RainboyOJ3020
通过邻项微扰(微扰法/交换参数法)证明最优排列为按大臣左右手乘积升序排序,并结合高精度整除求解答案。
贪心高精度邻项交换法
普及+/提高-2026-10-07 13:50
RainboyOJ3014
同行交换只改列、同列交换只改行,两个要求解耦;一维问题化为环形均分纸牌,代价是前缀和数组到中位数的绝对偏差和,排序即可。
贪心排序数学中位数前缀和python
提高+/省选-2026-10-07 13:50
RainboyOJ3015
只允许相邻交换的排序,最小交换次数就是逆序对数;用归并排序在合并两个有序半段时顺便统计跨中线逆序对,O(n log n) 解决 n < 5×10^5 的规模。
逆序对归并排序树状数组
提高2026-10-07 13:50
RainboyOJ3010
把 A^B 的约数和拆成各质因子等比和的乘积,再用 1+p^k 递推在 O(log(eB)) 内求出每段等比和,全程只需乘加取模、不依赖逆元。
数论质因数分解分治倍增python
提高2026-10-07 13:50
RainboyOJ3011
区间 ±1 对差分数组只是单点 ±1,最少操作数为正槽位和与负槽位绝对值和的较大者,方案数为剩余缺口 +1。
差分贪心python
提高2026-10-07 13:50
RainboyOJ3012
二分平均值转换为前缀和最值判定,结合双指针前缀维护在 O(n log(max_a / eps)) 内求解最大平均值子段。
二分前缀和双指针
提高2026-10-07 13:50
RainboyOJ3001
把乘数 b 按二进制拆成若干 2 的幂之和,用逐位翻倍的加法代替乘法,每次取模使中间量不超过 2p,用 O(log b) 次加法求出 a*b mod p。
数学位运算快速幂倍增python
普及-2026-10-07 13:50
RainboyOJ3002
n 扇门都是逐位运算,位与位互不影响:用 0 和全 1 各穿越一次求出每位输入 0/1 的结果,再从高位到低位贪心,免费位不花预算、其余位在不超过 m 时买下。
位运算贪心python
提高2026-10-07 13:50
RainboyOJ3003
n≤20 的 Hamilton 最短路径:用二进制集合表示已走点集做状压 DP,按集合大小递推出终点状态。
动态规划状态压缩DP位运算python
普及+/提高-2026-10-07 13:50
RainboyOJ2097
线段树节点维护区间和,区间乘只在整段覆盖的 O(log n) 个节点挂乘法懒标记,查询或下钻前先下推结算,两种操作都降到 O(log n)。
线段树懒标记python
提高2026-10-07 13:50
RainboyOJ3000
把指数 b 按二进制拆成若干 2 的幂之和,逐位平方底数、只在为 1 的位累乘,用 O(log b) 次模乘求出 a^b mod p。
数学位运算快速幂python
普及-2026-10-07 13:50
RainboyOJ2095
逐行维护悬垂高度直方图,用单调栈在每行 O(C) 求最大矩形。
悬线法单调栈直方图
普及2026-10-07 13:50
RainboyOJ2093
利用 5x5 标准杨表状态压缩与记忆化搜索,结合逐位试填(数位DP/字典序排名)实现单词与编码的双向转换。
动态规划记忆化搜索组合数学
提高+/省选-2026-10-07 13:50
RainboyOJ2094
把路线看成 4×N 网格图上的哈密顿回路,按列扫描时切口上的横边只有 7 种配对方式,逐列线性递推即可得到答案。
pythonusaco动态规划状态压缩递推计数
提高+/省选-2026-10-07 13:50
RainboyOJ2096
前缀异或把子段异或化为两前缀配对,01-Trie 贪心求与历史前缀的最大异或,严格大于更新保最早结尾、叶子覆盖保同值最大下标得到最短子段。
字典树位运算贪心python
普及+/提高-2026-10-07 13:50
RainboyOJ2092
将原字符串倍长破环成链,利用双指针最小表示法在失配时批量跳过劣势区间,以线性时间求出字典序最小的循环同构串起始下标。
字符串双指针最小表示法
普及+/提高-2026-10-07 13:50
RainboyOJ2090
拆点成容量 1 的点弧后用最大流求最小点割大小,再按编号升序逐点重跑最大流判定可行性,得到字典序最小的坏机集合。
网络流最小割
提高+/省选-2026-10-07 13:50
RainboyOJ2091
先把 x、y 压缩成 O(N) 条带,再用自下而上的水平扫描线逐行比较覆盖状态:状态不同的条带贡献水平边,行内翻转处乘高度贡献竖直边,时间 O(N log N + N^2)、空间 O(N)。
pythonusaco扫描线离散化计算几何前缀和
提高+/省选-2026-10-07 13:50
RainboyOJ2089
N×N 网格哈密顿路径计数:DFS 枚举走遍所有格子的路径,用位掩码维护访问状态,配合度剪枝、区域切割剪枝、死胡同强制步三大剪枝通过 N≤7。
搜索DFS剪枝位运算
省选/NOI-2026-10-07 13:50
RainboyOJ2088
基于行汉明距离预处理与线性动态规划的字符切分与识别
动态规划线性DP位运算
提高+/省选-2026-10-07 13:50
RainboyOJ2086
通过行对称性归约为标准型拉丁方阵,再借助第二行置换环同构进行等价类合并与位运算搜索加速
搜索位运算置换群对称性剪枝
提高2026-10-07 13:50
RainboyOJ2084
把互相可达的学校缩成一个强连通分量:子任务 A 是缩点后入度为 0 的分量个数,子任务 B 是入度为 0 与出度为 0 的分量个数的较大值,只有一个分量时输出 0。
图论强连通分量sccusaco
提高+/省选-2026-10-07 13:50