Skip to content

Commit 3d59573

Browse files
committed
add abc375
1 parent 59c2cc7 commit 3d59573

File tree

5 files changed

+580
-14
lines changed

5 files changed

+580
-14
lines changed

docs/algorithm/AtCoder/abc372.md

+12-12
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@
3333
???+ Abstract "题目大意"
3434

3535
给你一个正整数 $M(1 \le M \le 10 ^5)$,找到一个正整数 $N$ 和一组序列 $A = (A_1, A_2, \cdots, A_N)$ 满足下列所有条件:
36-
36+
3737
- $1 \le N \le 20$
3838
- $0 \le A_i \le 10(1 \le i \le N)$
3939
- $\sum\limits_{i = 1}^N3^{A_i} = M$
40-
40+
4141
输出任意一组解即可。
4242

4343
??? Note "解题思路"
@@ -94,9 +94,9 @@
9494
??? Note "解题思路"
9595

9696
读入字符串 $S$ 马少处理出当前有多少个 `ABC` 子串,记为 `ans`
97-
97+
9898
替换前需要判断 `s.substr(x-2, 3)`,`s.substr(x-1, 3)`,`s.substr(x, 3)` 是不是 `ABC`,如果是则 `ans--`。
99-
99+
100100
替换前需要判断 `s.substr(x-2, 3)`,`s.substr(x-1, 3)`,`s.substr(x, 3)` 是不是 `ABC`,如果是则 `ans++`。
101101

102102
??? Success "参考代码"
@@ -156,16 +156,16 @@
156156
???+ Abstract "题目大意"
157157

158158
有 $N(1 \le N \le 2 \times 10^5)$ 个建筑,第 $i$ 个建筑的高度是 $H_i$,对于每一个 $i = 1, 2, \cdots, N$,找到满足下列条件的 $j(i < j \le N)$ 的个数:
159-
159+
160160
- 在第 $i$ 个建筑和第 $j$ 个建筑中间不存在另一个建筑比第 $j$ 个建筑高。
161161

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

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

168-
??? Success "参考代码"ze
168+
??? Success "参考代码"
169169

170170
=== "C++"
171171

@@ -211,14 +211,14 @@
211211
???+ Abstract "题目大意"
212212

213213
给你一个 $N(1 \le N \le 2 \times 10^5)$ 个点的无向图,初始的时候没有任何边。给你 $Q(1 \le Q \le 2 \times 10^5)$ 个询问,询问有两种类型:
214-
214+
215215
- 类型 1:`1 u v` ,表示在点 $u$ 和点 $v$ 之间添加一条无向边。
216216
- 类型 2:`2 v k` ,表示询问和点 $v$ 连通的所有点中第 $k(1 \le k \le 10)$ 大的点编号。如果和点 $v$ 连通的点的数量小于 $k$ 个,输出 `-1`。注:节点自身与自身连通。
217217

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

220220
连通分量可以用并查集维护,注意到 $k \le 10$,每个连通分量再附加维护一个有序的 `vector`,至多存储 $10$ 个节点的编号。合并的时候执行归并排序的流程,因此合并的时间复杂度 $O(k)$,查询复杂度 $O(1)$。
221-
221+
222222
如果 $k$ 比较大的话,可以参照 [官方题解](https://atcoder.jp/contests/abc372/editorial/10990) 优化。
223223

224224
??? Success "参考代码"
@@ -317,16 +317,16 @@
317317
???+ Abstract "题目大意"
318318

319319
给你一个 $N(2 \le N \le 2 \times 10 ^ 5)$ 个点,$N+M$ 条边的有向图,图中有两类边:
320-
320+
321321
- 第一类边:$1 \rightarrow 2, 2 \rightarrow 3, \cdots, N-1 \rightarrow N, N \rightarrow 1$,这种边一共有 $N$ 条。
322322
- 第二类边:输入 $M$ 对整数 $(X_i, Y_i)$,表示存在一条 $X_i \rightarrow Y_i$ 的边。这种边一共有 $M(1 \le M \le 50)$ 条。
323-
323+
324324
问:从点 $1$ 出发,有多少条长度为 $K$ 的路径?答案对 $998244353$ 取模。
325325

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

328328
考虑到 $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+
330330
实现的时候要注意点 $1$ 不能被缩,其次就是特殊处理最终结果停留在某条链的中间的情况。
331331

332332
??? Success "参考代码"

0 commit comments

Comments
 (0)