|
33 | 33 | ???+ Abstract "题目大意"
|
34 | 34 |
|
35 | 35 | 给你一个正整数 $M(1 \le M \le 10 ^5)$,找到一个正整数 $N$ 和一组序列 $A = (A_1, A_2, \cdots, A_N)$ 满足下列所有条件:
|
36 |
| - |
| 36 | + |
37 | 37 | - $1 \le N \le 20$
|
38 | 38 | - $0 \le A_i \le 10(1 \le i \le N)$
|
39 | 39 | - $\sum\limits_{i = 1}^N3^{A_i} = M$
|
40 |
| - |
| 40 | + |
41 | 41 | 输出任意一组解即可。
|
42 | 42 |
|
43 | 43 | ??? Note "解题思路"
|
|
94 | 94 | ??? Note "解题思路"
|
95 | 95 |
|
96 | 96 | 读入字符串 $S$ 马少处理出当前有多少个 `ABC` 子串,记为 `ans`
|
97 |
| - |
| 97 | + |
98 | 98 | 替换前需要判断 `s.substr(x-2, 3)`,`s.substr(x-1, 3)`,`s.substr(x, 3)` 是不是 `ABC`,如果是则 `ans--`。
|
99 |
| - |
| 99 | + |
100 | 100 | 替换前需要判断 `s.substr(x-2, 3)`,`s.substr(x-1, 3)`,`s.substr(x, 3)` 是不是 `ABC`,如果是则 `ans++`。
|
101 | 101 |
|
102 | 102 | ??? Success "参考代码"
|
|
156 | 156 | ???+ Abstract "题目大意"
|
157 | 157 |
|
158 | 158 | 有 $N(1 \le N \le 2 \times 10^5)$ 个建筑,第 $i$ 个建筑的高度是 $H_i$,对于每一个 $i = 1, 2, \cdots, N$,找到满足下列条件的 $j(i < j \le N)$ 的个数:
|
159 |
| - |
| 159 | + |
160 | 160 | - 在第 $i$ 个建筑和第 $j$ 个建筑中间不存在另一个建筑比第 $j$ 个建筑高。
|
161 | 161 |
|
162 | 162 | ??? Note "解题思路"
|
163 | 163 |
|
164 | 164 | 对于一组满足条件的 $(i, j)$,有 $\max\{H_{i+1}, H_{i+2}, \cdots, H_{j-1}\} \le H_j$。
|
165 |
| - |
| 165 | + |
166 | 166 | 如果固定 $i$,求出有多少个 $j$ 满足条件是困难的,但如果固定 $j$,只需要知道 $j$ 左边第一个比 $H_j$ 大的位置,设这个位置为 $t$,则 $j$ 可以给 $t$ 到 $j-1$ 的所有位置贡献 $1$。所以弄一个从左到右单调递增的单调栈,用差分数组维护每个 $j$ 的贡献即可。
|
167 | 167 |
|
168 |
| -??? Success "参考代码"ze |
| 168 | +??? Success "参考代码" |
169 | 169 |
|
170 | 170 | === "C++"
|
171 | 171 |
|
|
211 | 211 | ???+ Abstract "题目大意"
|
212 | 212 |
|
213 | 213 | 给你一个 $N(1 \le N \le 2 \times 10^5)$ 个点的无向图,初始的时候没有任何边。给你 $Q(1 \le Q \le 2 \times 10^5)$ 个询问,询问有两种类型:
|
214 |
| - |
| 214 | + |
215 | 215 | - 类型 1:`1 u v` ,表示在点 $u$ 和点 $v$ 之间添加一条无向边。
|
216 | 216 | - 类型 2:`2 v k` ,表示询问和点 $v$ 连通的所有点中第 $k(1 \le k \le 10)$ 大的点编号。如果和点 $v$ 连通的点的数量小于 $k$ 个,输出 `-1`。注:节点自身与自身连通。
|
217 | 217 |
|
218 | 218 | ??? Note "解题思路"
|
219 | 219 |
|
220 | 220 | 连通分量可以用并查集维护,注意到 $k \le 10$,每个连通分量再附加维护一个有序的 `vector`,至多存储 $10$ 个节点的编号。合并的时候执行归并排序的流程,因此合并的时间复杂度 $O(k)$,查询复杂度 $O(1)$。
|
221 |
| - |
| 221 | + |
222 | 222 | 如果 $k$ 比较大的话,可以参照 [官方题解](https://atcoder.jp/contests/abc372/editorial/10990) 优化。
|
223 | 223 |
|
224 | 224 | ??? Success "参考代码"
|
|
317 | 317 | ???+ Abstract "题目大意"
|
318 | 318 |
|
319 | 319 | 给你一个 $N(2 \le N \le 2 \times 10 ^ 5)$ 个点,$N+M$ 条边的有向图,图中有两类边:
|
320 |
| - |
| 320 | + |
321 | 321 | - 第一类边:$1 \rightarrow 2, 2 \rightarrow 3, \cdots, N-1 \rightarrow N, N \rightarrow 1$,这种边一共有 $N$ 条。
|
322 | 322 | - 第二类边:输入 $M$ 对整数 $(X_i, Y_i)$,表示存在一条 $X_i \rightarrow Y_i$ 的边。这种边一共有 $M(1 \le M \le 50)$ 条。
|
323 |
| - |
| 323 | + |
324 | 324 | 问:从点 $1$ 出发,有多少条长度为 $K$ 的路径?答案对 $998244353$ 取模。
|
325 | 325 |
|
326 | 326 | ??? Note "解题思路"
|
327 | 327 |
|
328 | 328 | 考虑到 $M \le 50$,所以第二种类型的边是非常少的,图中大多数的点 $i$ 只有 $i \rightarrow i+1$ 一条边,一旦访问到对于这样类型的点,只能一路 $i \rightarrow i+1 \rightarrow i+2 \rightarrow \cdots$,所以考虑对图中的点进行缩点处理,把相邻的出度和入度为 $1$ 的点缩成一个,缩点的同时记录下每个点的集合大小。显然锁完点之后图中最多有 $4 \times M$ 个点,然后考虑 $dp$,定义 $dp[i][j]$ 表示走到点 $i$ 的长度为 $j$ 的路径数量,按照定义后向的传播即可。
|
329 |
| - |
| 329 | + |
330 | 330 | 实现的时候要注意点 $1$ 不能被缩,其次就是特殊处理最终结果停留在某条链的中间的情况。
|
331 | 331 |
|
332 | 332 | ??? Success "参考代码"
|
|
0 commit comments