Skip to content

Commit 7c63ca9

Browse files
committed
add abc372
1 parent 4d0ce9f commit 7c63ca9

File tree

1 file changed

+26
-26
lines changed

1 file changed

+26
-26
lines changed

docs/algorithm/AtCoder/abc372.md

+26-26
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
???+ Abstract "题目大意"
44

5-
给你一个字符串 $S$,删除其所有的 `.`
5+
给你一个字符串 $S$,删除其所有的 `.`
66

77
??? Success "参考代码"
88

@@ -32,17 +32,17 @@
3232

3333
???+ Abstract "题目大意"
3434

35-
给你一个正整数 $M(1 \le M \le 10 ^5)$,找到一个正整数 $N$ 和一组序列 $A = (A_1, A_2, \cdots, A_N)$ 满足下列所有条件:
35+
给你一个正整数 $M(1 \le M \le 10 ^5)$,找到一个正整数 $N$ 和一组序列 $A = (A_1, A_2, \cdots, A_N)$ 满足下列所有条件:
3636

37-
- $1 \le N \le 20$
38-
- $0 \le A_i \le 10(1 \le i \le N)$
39-
- $\sum\limits_{i = 1}^N3^{A_i} = M$
37+
- $1 \le N \le 20$
38+
- $0 \le A_i \le 10(1 \le i \le N)$
39+
- $\sum\limits_{i = 1}^N3^{A_i} = M$
4040

41-
输出任意一组解即可。
41+
输出任意一组解即可。
4242

4343
??? Note "解题思路"
4444

45-
可以枚举,也可以从最低位开始消除。
45+
可以枚举,也可以从最低位开始消除。
4646

4747
??? Success "参考代码"
4848

@@ -89,15 +89,15 @@
8989

9090
???+ Abstract "题目大意"
9191

92-
给你一个长度为 $N(3 \le N \le 2 \times 10^5)$ 字符串 $S$,同时给你 $Q(1 \le Q \le 2 \times 10^5)$ 个询问,每个询问包括一个整数 $X_i$ 和一个字符 $C_i$,你需要将 $S_{X_i}$ 替换成字符 $C_i$,然后回答出 $S$ 有多少个 `ABC` 子串。
92+
给你一个长度为 $N(3 \le N \le 2 \times 10^5)$ 字符串 $S$,同时给你 $Q(1 \le Q \le 2 \times 10^5)$ 个询问,每个询问包括一个整数 $X_i$ 和一个字符 $C_i$,你需要将 $S_{X_i}$ 替换成字符 $C_i$,然后回答出 $S$ 有多少个 `ABC` 子串。
9393

9494
??? Note "解题思路"
9595

96-
读入字符串 $S$ 马少处理出当前有多少个 `ABC` 子串,记为 `ans`
96+
读入字符串 $S$ 马少处理出当前有多少个 `ABC` 子串,记为 `ans`
9797

98-
替换前需要判断 `s.substr(x-2, 3)``s.substr(x-1, 3)``s.substr(x, 3)` 是不是 `ABC`,如果是则 `ans--`
98+
替换前需要判断 `s.substr(x-2, 3)`,`s.substr(x-1, 3)`,`s.substr(x, 3)` 是不是 `ABC`,如果是则 `ans--`。
9999

100-
替换前需要判断 `s.substr(x-2, 3)``s.substr(x-1, 3)``s.substr(x, 3)` 是不是 `ABC`,如果是则 `ans++`
100+
替换前需要判断 `s.substr(x-2, 3)`,`s.substr(x-1, 3)`,`s.substr(x, 3)` 是不是 `ABC`,如果是则 `ans++`。
101101

102102
??? Success "参考代码"
103103

@@ -155,15 +155,15 @@
155155

156156
???+ Abstract "题目大意"
157157

158-
有 $N(1 \le N \le 2 \times 10^5)$ 个建筑,第 $i$ 个建筑的高度是 $H_i$,对于每一个 $i = 1, 2, \cdots, N$,找到满足下列条件的 $j(i < j \le N)$ 的个数:
158+
有 $N(1 \le N \le 2 \times 10^5)$ 个建筑,第 $i$ 个建筑的高度是 $H_i$,对于每一个 $i = 1, 2, \cdots, N$,找到满足下列条件的 $j(i < j \le N)$ 的个数:
159159

160-
- 在第 $i$ 个建筑和第 $j$ 个建筑中间不存在另一个建筑比第 $j$ 个建筑高。
160+
- 在第 $i$ 个建筑和第 $j$ 个建筑中间不存在另一个建筑比第 $j$ 个建筑高。
161161

162162
??? Note "解题思路"
163163

164-
对于一组满足条件的 $(i, j)$,有 $\max\{H_{i+1}, H_{i+2}, \cdots, H_{j-1}\} \le H_j$。
164+
对于一组满足条件的 $(i, j)$,有 $\max\{H_{i+1}, H_{i+2}, \cdots, H_{j-1}\} \le H_j$。
165165

166-
如果固定 $i$,求出有多少个 $j$ 满足条件是困难的,但如果固定 $j$,只需要知道 $j$ 左边第一个比 $H_j$ 大的位置,设这个位置为 $t$,则 $j$ 可以给 $t$ 到 $j-1$ 的所有位置贡献 $1$。所以弄一个从左到右单调递增的单调栈,用差分数组维护每个 $j$ 的贡献即可。
166+
如果固定 $i$,求出有多少个 $j$ 满足条件是困难的,但如果固定 $j$,只需要知道 $j$ 左边第一个比 $H_j$ 大的位置,设这个位置为 $t$,则 $j$ 可以给 $t$ 到 $j-1$ 的所有位置贡献 $1$。所以弄一个从左到右单调递增的单调栈,用差分数组维护每个 $j$ 的贡献即可。
167167

168168
??? Success "参考代码"ze
169169

@@ -210,16 +210,16 @@
210210

211211
???+ Abstract "题目大意"
212212

213-
给你一个 $N(1 \le N \le 2 \times 10^5)$ 个点的无向图,初始的时候没有任何边。给你 $Q(1 \le Q \le 2 \times 10^5)$ 个询问,询问有两种类型:
213+
给你一个 $N(1 \le N \le 2 \times 10^5)$ 个点的无向图,初始的时候没有任何边。给你 $Q(1 \le Q \le 2 \times 10^5)$ 个询问,询问有两种类型:
214214

215-
- 类型 1:`1 u v` ,表示在点 $u$ 和点 $v$ 之间添加一条无向边。
216-
- 类型 2:`2 v k` ,表示询问和点 $v$ 连通的所有点中第 $k(1 \le k \le 10)$ 大的点编号。如果和点 $v$ 连通的点的数量小于 $k$ 个,输出 `-1`。注:节点自身与自身连通。
215+
- 类型 1:`1 u v` ,表示在点 $u$ 和点 $v$ 之间添加一条无向边。
216+
- 类型 2:`2 v k` ,表示询问和点 $v$ 连通的所有点中第 $k(1 \le k \le 10)$ 大的点编号。如果和点 $v$ 连通的点的数量小于 $k$ 个,输出 `-1`。注:节点自身与自身连通。
217217

218218
??? Note "解题思路"
219219

220-
连通分量可以用并查集维护,注意到 $k \le 10$,每个连通分量再附加维护一个有序的 `vector`,至多存储 $10$ 个节点的编号。合并的时候执行归并排序的流程,因此合并的时间复杂度 $O(k)$,查询复杂度 $O(1)$。
220+
连通分量可以用并查集维护,注意到 $k \le 10$,每个连通分量再附加维护一个有序的 `vector`,至多存储 $10$ 个节点的编号。合并的时候执行归并排序的流程,因此合并的时间复杂度 $O(k)$,查询复杂度 $O(1)$。
221221

222-
如果 $k$ 比较大的话,可以参照 [官方题解](https://atcoder.jp/contests/abc372/editorial/10990) 优化。
222+
如果 $k$ 比较大的话,可以参照 [官方题解](https://atcoder.jp/contests/abc372/editorial/10990) 优化。
223223

224224
??? Success "参考代码"
225225

@@ -316,18 +316,18 @@
316316

317317
???+ Abstract "题目大意"
318318

319-
给你一个 $N(2 \le N \le 2 \times 10 ^ 5)$ 个点,$N+M$ 条边的有向图,图中有两类边:
319+
给你一个 $N(2 \le N \le 2 \times 10 ^ 5)$ 个点,$N+M$ 条边的有向图,图中有两类边:
320320

321-
- 第一类边:$1 \rightarrow 2, 2 \rightarrow 3, \cdots, N-1 \rightarrow N, N \rightarrow 1$,这种边一共有 $N$ 条。
322-
- 第二类边:输入 $M$ 对整数 $(X_i, Y_i)$,表示存在一条 $X_i \rightarrow Y_i$ 的边。这种边一共有 $M(1 \le M \le 50)$ 条。
321+
- 第一类边:$1 \rightarrow 2, 2 \rightarrow 3, \cdots, N-1 \rightarrow N, N \rightarrow 1$,这种边一共有 $N$ 条。
322+
- 第二类边:输入 $M$ 对整数 $(X_i, Y_i)$,表示存在一条 $X_i \rightarrow Y_i$ 的边。这种边一共有 $M(1 \le M \le 50)$ 条。
323323

324-
问:从点 $1$ 出发,有多少条长度为 $K$ 的路径?答案对 $998244353$ 取模。
324+
问:从点 $1$ 出发,有多少条长度为 $K$ 的路径?答案对 $998244353$ 取模。
325325

326326
??? Note "解题思路"
327327

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$ 的路径数量,按照定义后向的传播即可。
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$ 的路径数量,按照定义后向的传播即可。
329329

330-
实现的时候要注意点 $1$ 不能被缩,其次就是注意最终结果停留在某条链的中间的情况
330+
实现的时候要注意点 $1$ 不能被缩,其次就是特殊处理最终结果停留在某条链的中间的情况
331331

332332
??? Success "参考代码"
333333

0 commit comments

Comments
 (0)