独特字符串(Unique String) 独特字符串题目描述给定字符串 s 和 q 次查询,每次查询 [l, r] 区间,判断该子串是否为”独特字符串”——存在至少一个字符在该子串中恰好出现一次。 核心观察对于每次查询 [l, r],需要知道每个字符在该区间内出现的次数。如果存在某个字符出现恰好 1 次,则答案为 YES。 如何想到前缀和?核心问题:区间查询 → 需要快速得到区间内字符出现次数 → 前缀和 套路总结 看到区间查询:先问自己 2026-03-18 algorithm #Python #前缀和 #题解
抽卡系统(Gacha System) 抽卡系统题目描述构造一个长度为 n 的序列,仅包含 A、B、C、D 四种字符,满足: 每 10 次抽卡:至少一个 B、C 或 D 每 90 次抽卡:至少一个 C 或 D 每 180 次抽卡:至少一个 D 已知 B、C、D 的数量分别为 x、y、z 解题思路核心观察题目要求的是保底机制: 第 180 抽:D 第 90 抽:C 或 D 第 10 抽:B、C 或 D 贪心分配从后往前分配,保证每 2026-03-18 algorithm #Python #题解 #贪心
跳跃过桥(Jump Game) 跳跃过桥题目描述有 n 个方块组成的桥,每个方块有价值 a_i。起点为 0,终点为 n+1。跳跃能力为 k,每次可跳 [X+1, X+k] 范围内的任意位置。求过桥代价的最小值(代价 = 经过方块的最大价值)。 思路分析如何思考这个问题? 代价的定义:代价是路径上所有方块价值的最大值 状态的表示:设 dp[i] = 到达位置 i 的最小代价(即路径上最大值的最小可能) 状态转移: 从位置 j 2026-03-18 algorithm #Python #滑动窗口 #题解 #二分搜索 #单调队列
密码分配(Password Crack) 密码分配题目描述有 n 台破解器,字符集 S 长度为 k,密码长度为 m。总共有 k^m 个密码,按 S 定义的字典序排列。每台破解器处理连续的一段密码,要求: 所有密码都被处理 工作量均衡,最大与最小工作量差不超过 1 解题思路1. 计算总密码数total = k^m 2. 均匀分配base = total // n # 每台基础数量 remainder = total % n 2026-03-18 algorithm #Python #题解 #K进制
矩阵路径构造题解 矩阵路径构造题解题目概述构造一个 $n \times m$ 的矩阵($n \times m \leq 200$),对于每个查询的非负整数 $S$,需要找到一条从 $(1,1)$ 到 $(n,m)$ 的路径,满足: 每个单元格至多被经过一次 路径上所有数字之和等于 $S$ 构造思路矩阵构造设 $n = \lfloor \log2(\max S) \rfloor + 1$,即最大查询值 $S{\m 2026-03-18 algorithm #构造 #二进制
use_python 输入readline() 、readlines() 和 read() 区别import sys # 输入: # Hello # World # ! # 使用 readline() line1 = sys.stdin.readline() # "Hello\n" line2 = sys.stdin.readline() # "World\n" line 2026-03-18 algorithm #Python
Greedy Algorithms with Sorting 贪心算法与排序 Greedy Algorithms with Sorting贪心算法与排序贪心算法在每一步选择当前最优的选项,通常与排序配合使用。 一、贪心算法基础贪心算法的核心是价值函数:决定哪个选择是最优的。 要最大化某个值 → 每次选择最大的 要最小化某个值 → 每次选择最小的 关键:贪心算法需要证明其正确性,通常通过交换参数证法(exchange argument)。 二、例题1:学习算法(Stu 2026-03-18 02_Silver #贪心算法 #排序
数据结构 Queues 队列队列是一种先进先出 First In First Out(FIFO)的数据结构,支持三种操作,所有操作的时间复杂度均为 $\mathcal{O}(1)$ 。 std::queue push: 在队列的末尾插入 pop: 从队列的前端删除 front: 获取前端元素但不将其移除 queue<int> q; q.push(1); 2026-03-18 algorithm #队列 #双端队列
Graph 图 Graph 图邻接表pythonN, M = map(int, input().split()) adj = [[] for _ in range(N)] for i in range(M): u, v = map(int, input().split()) adj[u].append(v) adj[v].append(u) u = 1 # print number of vertice 2026-03-18 02_Silver #图搜索算法 #DFS #BFS
使用递归的穷举搜索 使用递归的穷举搜索Subsets 子集https://cses.fi/problemset/task/1623 递归生成子集编写一个递归函数,遍历所有可能的分组方式。 在某个索引处,我们要么将 $\texttt{apple}_i$ 添加到第一个集合,要么添加到第二个集合,存储两个总和 $\texttt{sum}_1$ 和 $\texttt{sum}_2$ ,分别表示每个集合中值的总和。 一 2026-03-18 02_Silver #穷举搜索 #递归