题解:P8509 如何得到 npy
第一问很好求,相当于是所有点到 $s$ 或 $t$ 中较近的点的最短路径之和。换句话说,把 $s$ 与 $t$ 分别作为起点,跑两遍最短路后得到 $diss,dist$ 分别表示最短路,则答案即为 $\sum\limits_{i = 1}^{n} \...
第一问很好求,相当于是所有点到 $s$ 或 $t$ 中较近的点的最短路径之和。换句话说,把 $s$ 与 $t$ 分别作为起点,跑两遍最短路后得到 $diss,dist$ 分别表示最短路,则答案即为 $\sum\limits_{i = 1}^{n} \...
看到题目,有三个变量,首先想到消参。由辗转相减法可知 $\gcd (a,b) = \gcd (a,a + b)$,又因为 $a + b + c = n$,所以 $a + b = n - c$,即 $\gcd (a,b) = \gcd (a,n - c...
所有操作均建立在二维平面上,容易想到 STL 库的 set。将点的 $y$ 坐标放入到对应的集合 $x$ 中进行相应的操作。插入操作为 s[x].insert (y),删除操作为 s[x].erase (y),而查询操作需要从小到大遍历下标大于 $x...
第二种操作是从 $1$ 开始修改的,也就是修改一段前缀,考虑递推。由于操作可逆,所以我们可以转换为将读入的串变为全 A 串所需的最小变换次数。 设 $f_{i,0}$ 表示前 $i$ 个字符均为 A 时的最小变换次数,设 $f_{i,1}$ 表示前 ...
这是一道区间 dp,思维难度与实现难度都不小,主要的瓶颈在于如何不重不漏地转移(这要求仔细地读题)。 和题目一样,A 表示一个符合规范的超级括号序列,S 表示任意一个仅由不超过 $k$ 个字符 * 组成的非空字符串,即 *...*。以下就不再赘述字符...
本题是 P4302 [SCOI2003]字符串折叠 的强化版。 不难看出这是一个区间 dp,令 dp[i][j] 表示区间 $[l,r]$ 的最小长度。考虑两种操作: 合并两个小区间后变为一个大区间 将某个区间进行折叠 第一个操作,显然就是区...
$\forall b_i = \lfloor \dfrac{i}{a_i} \rfloor$,等价于 $a_ib_i \le i < a_i(b_i + 1)$,所以有 $\dfrac{i}{b_i + 1} < a_i \le \df...
若干个车站被停靠若干次,第 $i$ 次停靠的站点为 $j$,设 $\forall j \in n$,站点 $j$ 被停靠所对应的集合为 $ {C_i}$。则容易想到,对于每组询问的 $x,y$,若成立则一定满足 $\min \{C_x\} < ...
对于一个 $a_i$ 若可以表示成 $k \times 2^p$ 的形式,那一定可以由 $k$ 进行若干次第一个乘 $2$ 的操作得到。所以我们将所有的 $a_i$ 预处理,使其变成奇数。然后使用 map <int,int> p 统计 $...
一开始以为是一个 $\texttt{dp}$,仔细一看发现只是一个普通的贪心。 若 $k \le n$,则不能收集完或恰好收集完所有的蘑菇。如果一个地方的蘑菇被重复地收取,则会浪费之前到达该地所花的时间。我们的目标是使得时间之和最大,故一个地方重复遍...