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。否则就不变。


参考代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值