• Alice and Recoloring 1题解


    1.前言

    差分大法好


    2.题解

    如果 (i,j) 这一位置是 black,令 a[i][j] = 1,否则 a[i][j] = 0。

    Hint 0:

    不会对同一个位置使用多次同一种操作(应该很好证明,略)。


    Hint 1:

    操作 2 和操作 3 没有用。

    对 (x, y) 使用操作 2 可以通过对 (n, y), (x - 1, y) 使用操作 3 来替换,操作 3 的替换方法类似,只会赚取费用而不会亏损费用。

    操作 4 只能用 4 费用代替:对 (n, m), (x - 1, m), (n, y - 1), (x - 1, y - 1) 使用操作 1,可以赚 1 费用。

    但是如果两次使用操作 4,我们就没有必要操作两次 (n, m) 了,这样操作费用就都为 6 费用了。

    所以用操作 1 替换操作 4 的相差费用周期是: -1, 0, -1, 0…。不妨可以看作是只使用一次操作 4。


    Hint 2:

    我们先排开操作 4.

    d[i][j] = 1表示对 (i, j) 要进行操作 1,d[i][j] = 0 表示不对 (i, j) 进行操作 1。

    那么 a[i][j] 的含义就是 (i,j) 的 后缀操作 1 的和 模 2(当然也等价于异或和)。

    a [ i ] [ j ] = ( ∑ x = i n ∑ y = j m d [ i ] [ j ] )   m o d   2 a[i][j] =(\sum_{x = i}^n \sum_{y = j}^m d[i][j]) \bmod 2 a[i][j]=(x=iny=jmd[i][j])mod2

    那么我们可以通过这个式子反推 a[i][j]。

    这个式子是一个典型的后缀和式子,马上可得

    d [ i ] [ j ] = ( a [ i ] [ j ] − a [ i + 1 ] [ j ] − a [ i ] [ j + 1 ] + a [ i + 1 ] [ j + 1 ] )   m o d   2 d[i][j] = (a[i][j] - a[i + 1][j] - a[i][j + 1] + a[i + 1][j + 1]) \bmod 2 d[i][j]=(a[i][j]a[i+1][j]a[i][j+1]+a[i+1][j+1])mod2

    所以不考虑操作 4 的答案是

    ∑ i = 1 n ∑ j = 1 m d [ i ] [ j ] \sum_{i = 1}^{n}\sum_{j = 1}^{m} d[i][j] i=1nj=1md[i][j]

    再来考虑操作 4 用在哪里。由 Hint 1 可知,它可以代替对 (n, m), (x - 1, m), (n, y - 1), (x - 1, y - 1) 使用操作 1,并节省 1 费用,所以说判断

    p : ∃ x , [ d [ n ] [ m ] = 1 ] ∧ [ d [ x − 1 ] [ m ] = 1 ] ∧ [ d [ n ] [ y − 1 ] = 1 ] ∧ [ d [ x − 1 ] [ y − 1 ] = 1 ] p: \exist x,[d[n][m] = 1] \wedge [d[x - 1][m] = 1] \wedge [d[n][y - 1] = 1] \wedge [d[x - 1][y - 1] = 1] p:x,[d[n][m]=1][d[x1][m]=1][d[n][y1]=1][d[x1][y1]=1]

    如果是个真命题,那么答案就需要减去 1。否则就不变。


    参考代码

  • 相关阅读:
    基于空间金字塔网络的光流估计
    ceph 线程池分析
    SpringMVC第六阶段:数据在域中的保存(02)
    如何进行数据结构的设计和实现?
    微信公众号之分享接口
    PHP常见算法
    NVMe-MI协议解读
    暴雪和网易分手百万玩家何去何从
    Python图像处理丨三种实现图像形态学转化运算模式
    软件项目验收测试需提供哪些资料?找软件测试外包公司的好处?
  • 原文地址:https://blog.csdn.net/C2022lihan/article/details/125508337