• AtCoder Beginner Contest 196 A-F题解


    AC代码

    A - Difference Max

    输出(b - c)

    B - Round Down

    遍历字符串,若遇到.将其改为

    C - Doubled

    易得:前半部分的值不会超过(10^6)

    所以可以枚举前半部分的值,再判断是否满足条件。

    D - Hanjo

    因为(HW le 16),比较小,所以直接递归暴力求解。

    复杂度分析

    如果面积为2的方块都确定了,那么面积为1的方块的放置方式也就确定了。

    若不考虑面积为2的方块重叠的case,那么可以从(HW)个各自中选择(A)个作为方块的左上角,一共(C_{HW}^{A})种方法,再加上每个方块有两种可能的朝向,一共(2^A)中方法。合并在一起一共(2^AC_{HW}^{A})种放置方法。

    若考虑方块重叠,放置方法会更少。

    由此,复杂度至多为(O(2^AC_{HW}^{A})),在这题的数据量上已经足够了。

    E - Filters

    首先,每种操作都可以按下列方式转化成(f(x) = min(c, max(b, x + a)))的形式。

    • (t_i = 1: f(x) = x + a_i = min(infin, max(-infin, x + a_i)))
    • (t_i = 2: f(x) = max(a_i, x) = min(infin, max(a_i, x + 0)))
    • (t_i = 3: f(x) = min(a_i, x) = min(a_i, max(-infin, x + 0)))

    其次,可以推导出:若(f,g)都为具备上述形式的函数,那么(g(f(x)))也为满足上述形式的函数。

    由此,(f_N( dots f_2(f_1(x_i)) dots ))也为满足上述形式的函数,每次按(t_i)的不同更新参数(a, b, c)即可,每次更新的时间复杂度为(O(1))。具体如下:

    • (f_1(x) = min(c_1, max(b_1, x + a_1)))
    • (f_2(x) = min(c_2, max(b_2, x + a_2)))
    • (f_2(f_1(x)) = min(min(c_2, max(b_2, c_1 + a_2)), max(max(b_2, min(c_1 + a_2, b_1 + a_2)), x + (a_1 + a_2))))

    现在,(f_N( dots f_2(f_1(x_i)) dots ) = min(c, max(b, x + a)))然后就可以(O(1))回答每一个询问,总的复杂度是(O(N + Q))

    F - Substring 2

    (S_i = T_j),则两者匹配的代价为0,反之为1。其实就是异或操作。

    (T)最后成了(S)从下标(i)开始的字串,则需要的操作次数

    [egin{align} cost_i &= sum_{j = 0}^{|T| - 1} S_{i + j} oplus T_j \ &= sum_{j = 0}^{|T| - 1} (1 - S_{i + j})T_j + sum_{j = 0}^{|T| - 1} S_{i + j}(1 - T_j) \ &= sum_{j = 0}^{|T| - 1} S_{i + j} + sum_{j = 0}^{|T| - 1} T_j - 2sum_{j = 0}^{|T| - 1} S_{i + j}T_j end{align} ]

    式子的前两项都比较容易计算,而第3项长得很像卷积的式子,也确实可以通过简单的换元变成卷积。

    (R^prime = reverse(T)),则有

    [egin{align} C_i &= sum_{j = 0}^{|T| - 1} S_{i + j}T_j \ &= sum_{j = 0}^{|T| - 1} S_{i + j}R_{|T| - 1 - j} \ &= sum_{x + y = i + |T| - 1} S_xR_y end{align} ]

    (C_i)可以用FFT在(O(n log_n))的时间内计算。特别地,(C_{i - |T| + 1})(cost_i)的第3项值。

    计算出所有的(cost_i)取最小即可。

  • 相关阅读:
    Oracle Words Spelling Error
    原创 分布式锁与应用场景
    原创 分布式事务简单实现思路
    原创 使用redis位图实现布隆过滤器
    原创 redis实现接口限流
    原创 jwt-security简单实现
    原创 抢购秒杀之redis高性能实现
    原创 springcloud feign优化配置
    原创 派单、抢单业务简单实现
    原创 微信公众号推送图片实现
  • 原文地址:https://www.cnblogs.com/zengzk/p/14579669.html
Copyright © 2020-2023  润新知