8.28 模拟赛

比赛复盘

浏览所有题后发现所有题都是普及难度。

A。数据范围这么小,暴力 DP 就行。不对 \(10^{40}\) 的答案……要高精度!!尝试了 vector 写高精乘发现异常简单。

B。一年前我就能不看题解独立切。很快写完了。我清晰地记着分数加分数时分子分母要开 __int128。

C。又是小 \({\Omega}\)显然 \(k = 1\) 答案是 \(n\)\(k \ge 3\) 时答案与 \(10^6\) 同阶,直接暴力。当 \(k = 2\) 时仍然暴力做 \(k \ge 3\) 的,然后去一下重就行。很简单的思想,但是写代码时用了较长时间,因为暴力做的时候直接求幂可能会炸 long long/double。想到了 202? CSP-J T1,手写了 pow 函数就过了所有大样例。

D。一年前我就能不看题解独立切。一年后老师还讲过一遍。写完一遍过大样例。

我去才 \(9:07\)???我 1h AK 了???

赶紧对拍。差不多 10 点左右写完了 genA/genC/genD 和 blA/blC/blD,B 题的 gen 需要构造一个很多要求的 DAG 不想写。对拍,启动!

A 炸了?C 炸了?D 正常。调试,启动!

找到错是 blA 的 dfs check 挂了,blC 犯了那个可能会炸 long long/double 的错误。改。

又过了一会 A 炸了,原因是高精度应该输出 \(0\) 但我输出空。改。

然后就都没错了。

壮观!

此时是 \(10:22\)。等待。

最后 B 挂了。原因是输出答案也应该输出 __int128。

比赛过程中好的做法和不足

  1. 做的比较好的地方:差点 AK 了。

  2. 不足:

    1. B 挂了。
    2. 比赛还没结束就写总结。

试题分析

  • T1:DP,高精度。
  • T2:拓扑排序,小模拟。
  • T3:数学,时间复杂度分析(?)。
  • T4:前缀和,小模拟。

补题情况

A. 乘积最大

我们可以将 k ++ ,然后转化成将数字分成 \(k\) 部分。

\(f(i, j)\) 表示将前 \(i\) 位划分成 \(j\) 部分能得到的最大结果。转移显然。

注意需要高精度。

B. 排水系统

显然是一个 DAG。设 \(f(u)\) 表示第 \(u\) 个水管会排出多少污水。转移 \(f(u) \xrightarrow{+\frac{f(d)}{dout(u)}} f(v)\)。其中 \(dout(u)\) 表示 \(u\) 的出度。

注意可以写一个 struct Frac,然后重载运算符。

C. 幂次

分类讨论:

  • \(k = 1\):答案为 \(n\)
  • \(k \ge 3\):此时答案与 \(10^6\) 同阶。暴力即可。
  • \(k = 2\)\(1 \sim n\) 内的完全平方数显然有 \(\sqrt n\) 个。先做一遍 \(k \ge 3\)。然后做一个简单容斥即可。

D. 种花

典中典。

枚举 \(\texttt C\) 的左下角,\(\texttt F\) 相当于从 \(\texttt C\) 的左下角往下延申。

前缀和优化。维护最多向右/下延申多少,以及向上并右拐能延伸多少。用到了一些基础的加/乘法原理。

posted @ 2024-08-28 11:02  2huk  阅读(11)  评论(0编辑  收藏  举报