2020.12.12 刷题总结

有意思一点的题:

  • ACWing 97 约数之和(Sumdiv)
  • ACWing 98 分形之城(Fractal Streets)
  • ACWing 100 \(\text{IncDec}\)序列

ACWing 97 约数之和(Sumdiv)

\(A^B\)的约数和,对\(9901\)取膜。

爆算显然不行,我们考虑将\(A\)分解质因数成\(p_1^{c_1}p_2^{c_2}\cdots p_n^{c_n}\),那么\(A^B = p_1^{Bc_1}p_2^{Bc_2}\cdots p_n^{Bc_n}\)。答案即为

\[\prod_{i = 1} ^ n \sum_{j = 0} ^ {c_i} p_i^j \]

考虑如何求\(\sum \limits_{j = 0} ^ {c_i} p_i^j\)这块,用等比数列求和?无法取膜。

\(\text{sum}(p,c)\)\(\sum_{i = 0} ^ c p^i\)

\[\text{sum}(p,c) = \begin{cases} 0 & p = 0\\ 1 & c = 1\\ (p^{(c + 1) / 2} + 1) \times \text{sum}(p,(c - 1) /2) & p 为奇数\\ (p^{c / 2} + 1) \times \text{sum}(p,c / 2 - 1) + p^c & p 为偶数\\ \end{cases} \]

分治计算即可,对于那个分治的式子,应该有点数学素养就推出来了吧(

ACWing 98 分数之城(Fractal Streets)

这题要命。
\(A,B\)\(N\)等级下的坐标,然后用欧几里得距离计算即可。

考虑问题为\(\text{calc}(A,B,N)\),先算出\(\text{calc}(A,B,N - 1)\),然后:
考虑对于某一点坐标\((x,y)\)

  • 如果在\(N\)等级的左上角,相当于先顺时针旋转\(90\)度,然后再水平翻转。

我们小学二年级的时候就学过任意坐标的旋转,若一个点绕原点旋转\(\theta\)度后的坐标为

\[(x,y) \cdot \left[ \begin{matrix} \cos{\theta} & \sin{\theta}\\ -\sin{\theta} & \cos{\theta}\\ \end{matrix} \right] \]

旋转后得\((-y,x)\),翻转后得\((y,x)\)

  • 如果在\(N\)等级的左下角,相当于先逆时针旋转\(90\)度(顺时针旋转\(270\)度),然后再水平翻转。
    而且因为在下方,还需要进行一系列加,所以得\((2^N - y + 1,2^{N - 1} - x + 1)\)
  • 如果在\(N\)等级的右上角,得\((x,y + 2^{N - 1})\)
  • 如果在\(N\)等级的右下角,得\((x + 2^{N - 1},y + 2^{N - 1})\)

分治即可。

ACWing 100 \(\text{IncDec Sequence}\)

这题没有秒,悲。

建立差分数组\(b_i = a_i - a{i - 1}\)。考虑所有数都一样的要求,即对于\(2 \le i \le n\)\(b_i = 0\)。第二个询问即为进行操作后的\(q_1\)的值域大小。

那么问题就变为了修改\(b_2,b_3,\cdots b_n\),使其全为\(0\)

变换方式:

  • \(b_i,b_j\),如果\(b_i,b_j\)一正一负就正好,最优。
  • \(b_1,b_i\) 如果没有第一种修改方式合法的了,那么可以选择这种,因为修改\(b_1\)不影响合法性。
  • \(b_1,b_{n + 1}\) 同第二种
    \(cnt_1\)为所有\(b_i > 0\)\(b_i\)和,\(cnt_2\)为所有\(b_i < 0\)\(|b_i|\)和。

那么使用第一种方法显然为\(\min(cnt_1,cnt_2)\)次。

使用二三种方法显然为剩下来的,即为\(|cnt_1 - cnt_2|\)次。

那么第一问就是\(\min(cnt_1,cnt_2) + |cnt_1 - cnt_2| = \max(cnt_1,cnt_2)\)

第二问显然是使用第二种变换方式的次数的方案数,即为\(|cnt_1 - cnt_2| + 1\)(因为可以不使用方案2所以要+1)

posted @ 2020-12-12 23:14  luyiming123  阅读(115)  评论(1编辑  收藏  举报