zoukankan      html  css  js  c++  java
  • 2020.12.12 刷题总结

    有意思一点的题:

    • ACWing 97 约数之和(Sumdiv)
    • ACWing 98 分形之城(Fractal Streets)
    • ACWing 100 ( ext{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)这块,用等比数列求和?无法取膜。

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

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

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

    ACWing 98 分数之城(Fractal Streets)

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

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

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

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

    [(x,y) cdot left[ egin{matrix} cos{ heta} & sin{ heta}\ -sin{ heta} & cos{ heta}\ end{matrix} ight] ]

    旋转后得((-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 ( ext{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)

  • 相关阅读:
    kubernetes安装记录
    nginx ssl 客户端认证配置调研
    centos 6 docker 安装(通过yum)
    elk docker 部署实战
    react 技术栈项目轻量化方案调研
    service worker 实战
    记一次 node-fetch 使用时踩的坑
    那些年使用npm进行依赖管理所踩的坑
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
    linux 环境变量设置错误导致 command not found
  • 原文地址:https://www.cnblogs.com/luyiming123blog/p/14127269.html
Copyright © 2011-2022 走看看