随笔分类 - 难度
摘要:给定 $2m+1$ 种重量为 $w_i \in \{-m,...,m\}$ 的物品(数量 $a_i \leq 10^{12}$),要求选择最大数量的物品使其总重恰好为 $l$($|l| \leq 10^{18}$)。解法:首先贪心地选取所有物品得到总重 $W$,通过优先丢弃大/小重量物品将 $W$ 调整至区间 $[l-m, l]$;然后对剩余差值 $d = l - W$($|d| \leq m$)进行多重背包计算,将物品增减视为新物品($w \in [-m, m]$, $v = \pm 1$),使用单调队列优化实现 $O(m^3)$ 复杂度。若无解则输出 $\texttt{impossible}$,否则最优解为初始数量 $S$ 加上背包计算结果。
阅读全文
摘要:给定排列 $P$ 的长度 $n$ 和限制 $lim$,计算满足 $fun(P) \geq lim$ 的排列数量,其中 $fun(P)$ 表示以第一个元素为哨兵进行快速排序所需的单位时间。解法采用动态规划结合多项式插值:定义 $f_{a,b}$ 为长度为 $a$ 且 $fun(P)=b$ 的排列数,通过卷积形式优化转移后,利用拉格朗日插值在 $O(n^4)$ 时间内计算多项式系数,最后统计次数 $\geq lim$ 的项之和。核心步骤包括预处理组合数、计算点值、构造插值多项式,并使用模数 $10^9+7$ 处理大数运算。
阅读全文
摘要:题目描述了一个有向图随机游走问题,给定 $n$ 个问题,每个问题有分数 $s_i$、提交花费 $c_i$ 和通过概率 $p_i$。每个问题可以多次提交,但多次通过只算一次得分。初始有 $x$ 块钱,目标是最大化期望得分。使用动态规划,状态定义为 $f_{res,i}$ 表示剩余 $res$ 元且已解决集合 $i$ 的问题时的最大期望得分。转移方程考虑了提交每个未解决问题的成功和失败情况:$f_{res,i} = \max\{f_{res,i}, p_i \cdot (f_{res-c_j,i \cup j} + s_j) + (1-p_i) \cdot f_{res-c_j,i}\}$。最终时间复杂度为 $O(2^n n x)$,$n \le 8$。
阅读全文
摘要:2025 gdsy 春季训练 5 - 数论 前言 因为我数论太烂了,所以写一篇随笔总结一下。 A - Eri and Expanded Sets 计数题。刻画合法条件。 观察到对一个集合进行操作,最后的结果一定是一个等差数列。 如果不是等差数列,则集合一定可以继续进行操作。 方差为 \(1\) 或集
阅读全文
摘要:题目给定 $n$($n \le 10^5$)个带颜色(颜色 $\in \{0,1,2\}$)的点,求包含三种颜色点的最小周长矩形。题解采用偏序问题做法,点关系有两种偏序:一是 $x_0 < x_1 < x_2 \land y_1 < y_2 < y_0$;二是 $x_0 \le x_1 \le x_2 \land y_0 \le y_1 \le y_2$。第二种拆成两个二维偏序,扫描 $x$ 维求解,复杂度 $O(n \log n)$。第一种把两种颜色作数据、第三种作询问,扫描 $x$ 维,遇到数据修改线段树,遇到询问单点查询,线段树维护 $0$ 的最小 $-x + y$、$1$ 的最小 $-y$ 及两者最小和,保证标记时间戳顺序,复杂度也是 $O(n \log n)$。代码多次调用求解函数并处理不同变换情况。
阅读全文
摘要:给定长度 $n\leq10^5$ 的序列 $\{a_i\}$($a_i\leq10^6$),初始 $v = 1$,可至多 10^5 次乘除 $\text{lcm}\{b\}$($\sum |b| \leq 10^6$)使 $v$ 变为 $\gcd\{a_i \times a_j\}$。思路:考虑质因数指数(10^6 内最多 7 种),操作对应指数加减。用 min - max 容斥将 $\gcd\{a_i \times a_j\}$ 转化为 $\gcd$、$\text{lcm}$ 乘除,把最小和次小指数表示为 $(\gcd\{a_i\})^2 \prod_i \frac{\gcd_{i \neq j \{a_j\}}}{\gcd\{a_j\}}$,操作数约 $2^8 + 8 \times 2^8$,复杂度 $O(n\log n + n \omega(\sqrt{a}) + \sqrt{a})$。
阅读全文
摘要:题目要求根据给定的 $n$ 个点($n\leq2000$)和表示编号在 $[i,j]$($i \le j$)的点是否连通的 $a_{i,j}$($a_{i,j}=\{0,1\}$)构造出一棵合法的树,且保证有解。思路上先考虑小区间再合并到大区间,对于只有 $a_{1,n}=1$ 的情况给出了一种构造方案($n = 3$ 时无解);一般情况则按顺序加点,利用树的连通块性质,当 $a_{i,n}=1$ 时,通过连边($i,n$)等方式合并连通块,采用小到大枚举 $n$、从大到小枚举 $i$ 的方法,可证明其正确性,时间复杂度为 $O(n^2)$。代码实现了上述构造树的过程。
阅读全文
摘要:题目中坐标轴 $1$ 到 $n$($n\leq10^5$)有初始高度为 $0$ 的 $n$ 个房子,人在 $(0,0)$ 处,有 $m$ 次($m\leq10^5$)修改房子高度操作,每次修改后求可见楼房数(连线不被遮挡)。思路:维护各点与 $(0,0)$ 连线斜率,可见楼房斜率严格递增且优先左边。直接暴力修改 $O(1)$、查询 $O(n)$;采用线段树,维护节点满足要求的斜率序列长度,左儿子可直接合并,右儿子按需递归合并。单点修改,被影响结点 $O(\log n)$ 个,每次合并 $O(\log n)$,修改复杂度 $O(\log^2 n)$,全局查询 $O(1)$。代码实现上述逻辑。
阅读全文
摘要:有 $n$ 个长 $a_i$($n,a_i\leq10^5$)的随机字符串,$f(s)$ 是 $s$ 最小循环移位起始位置(多解取最小),求两循环序列 $\{f(s_i)\}$ 期望相同位置数。思路:算相邻 $f$ 相同概率求和,定义 $h_a$ 求 $g(f(a)=x)$,归并因数更新求解,预处理因数与 $h$,复杂度 $O((n + q)因数个数 + n\sqrt{n})$,代码实现计算。
阅读全文
摘要:题目给定长度为 $n$ 的序列,有 $q$ 次询问,每次询问区间 $[l,r]$ 的最短子区间 $[l',r']$,使 $[l,r]$ 中出现的数都在 $[l',r']$ 中出现,需输出 $[l',r']$ 的长度,$1\leq n,q\leq 2\times 10^6$,$1\leq a_i\leq n$。解题思路上,先有 $O(n^2)$ 的双指针暴力法。题解采用扫描右端点 $p$ 的方法,用数据结构维护右端点为 $p$ 时每个下标 $k$ 代表后缀的最小合法前缀 $f_k$,找出 $a_p$ 上一次出现位置 $la_p$,将询问的 $l$ 落在 $(la_p,p]$ 区间的 $f$ 对 $p$ 取 $\max$,使用并查集让 $la_p$ 指向 $la_p +1$ 以找到最大合法数据左端点 $d$。还可将问题类比二维偏序问题,转化为维护每个后缀点对权值来求解,因数据点权值维护需按顺序,所以按第二维一定顺序扫描。代码中用 zkw 线段树处理,添加了快读以优化。
阅读全文
该文被密码保护。
摘要:题意为统计字符串中满足以下条件的子串:一是子串为偶数长度回文,二是子串由多个偶数回文拼接而成。解法核心在于:利用唯一分解性,即每个合法子串可唯一拆分为极短偶回文组合(如 `abba|abba`);通过预处理,用Manacher算法找到每个起点最短的偶回文;采用DP计数,设 \(dp[i]\) 表示以位置 \(i\) 起始的满足条件的子串数量,\(f_i\) 为从位置 \(i\) 开始的极短回文长度,通过公式 \(dp[i] = 1 + dp[i + f_i]\) 计算,总时间复杂度为 \(O(n)\) 。
阅读全文
摘要:给定含 $n$ 点 $m$ 边的 DAG 与常数 $k$,定义 $f(l,r)$ 求满足条件的区间数。先处理弱化问题判断不相交路径,预处理矩阵。原问题借枚举终点集合求矩阵秩确定路径数,用时间戳线性基支持操作。利用单调性分段,时间复杂度 $O(nnk^2 + mk)$,瓶颈是线性基插入与矩阵预处理 。
阅读全文