ABC 362

比赛链接

\[\large\textbf{Solution} \]


\[\text{Buy a Pen} \]

A
题目链接
提交记录

模拟。

小技巧:用 pair 来处理类似问题很方便


\[\text{Right Triangle} \]

B
题目链接
提交记录

题意: 给定三个不共线的点, 判断这三个点生成的三角形是否是直角三角形.

考虑向量法。把三个点两两相减找到构成三角形的三条边所对应的向量,然后用向量点乘的方法判断是否存在两条邻边垂直。


\[\text{Sum = 0} \]

C
题目链接
提交记录

题意: 给定 \(n\) 个数对 \((L_i,R_i)\), 问是否能构造 \(\{A_n\}\), 使得 $ \forall i \in [1,n] $, $ L_i \le A_i \le R_i $, 有 $ \sum A = 0 $. 并给出构造方式.

性质:

  1. 首先发现令 \(A_i = L_i\) 时, 所得的和 \(\sum A\) 必然最小.

  2. 同理令 \(A_i=R_i\) 时, \(\sum A\) 必然最大.

  3. 以性质 \(1\) 的条件为初始状态, 若干次进行操作“对于某个 \(i\) 满足 \(A_i<R_i\), \(A_i\) 自增 \(1\)”, 可以使得 \(\sum A\) 遍历 \([L_i,R_i]\) 中的所有数.

因此,以下关系成立

能构造 $ { A_i } $, 使得 \(\sum A =0\) $ \Leftrightarrow $ \(L_i \le 0 \le R_i\)

至于构造方式呢,直接模拟遍历过程即可


\[\text{Shortest Path 3} \]

D
题目链接
提交记录

题意: 既有点权又有边权的单源最短路径. (权值非负)

对于一条完整的路径,我们把每一条边的终点的点权转到这条边上,就可以直接在边权上跑了。

比如说对于一条边 \((u,v,w)\), \(\operatorname{val} [u]\), \(\operatorname{val} [v]\), 我们建边的时候这样建就行了:

add_edge(u,v,w+val[v]);
add_edge(v,u,w+val[u]);

然后直接 dijkstra 跑一遍就行了,注意不要忘了加上 \(\operatorname{val} [1]\) 的贡献。


\[\text{Count Arithmetic Subsequences} \]

E
题目链接
提交记录

题意: 给你 \(\{a_n\}\), 对于所有的 \(k\in[1,n]\), 求出 \(\{a_n\}\) 中长度为 \(k\) 的等差数列的数量. (元素组成相同但位置不同算作不相同)

考虑 \(O(n^3)\) 的 dp.

  1. \(\operatorname{dp_{i,k,gap}}\) 表示以第 \(i\) 个元素作为结尾时可以构造的长度为 \(k\) 公比为 \(gap\) 的等差数列的个数.

  2. \(O(n^2)\) 枚举 \(k=a_i-a_j (i > j)\), 然后可以从 \(\operatorname{dp_{j,k,gap}}\) 刷表到 \(\operatorname{dp_{i,k+1,gap}}\)

  3. 边界条件 \(\operatorname{ dp_{i,1,gap}=1 }\), 刷表的同时赋值即可.

注意取模。


posted @ 2024-07-14 10:11  Jairon  阅读(28)  评论(0)    收藏  举报