[ABC269F] Numbered Checker Solution

更好的阅读体验戳此进入

题面

存在 n×m 的网格图,在里面按照从左至右,从上至下的顺序填写 [1,n×m] 所有数,然后使所有行数与列数之和为奇数的格子中的数推平为 0q 次询问求子矩形权值和。

Solution

尝试简单推一下式子,显然对于奇数行,为 1+km,3+km,5+km,,偶数行同理。对于多行相加,奇数行则 k=0,2,4,,偶数行同理。也就是说我们讨论奇偶之后,对一行里做一下等差数列求和然后乘上奇数行行数,对 k 做一遍等差数列求和然后乘上奇数列列数和 m 即可。

同时注意对于偶数的求和需要全部转为偶数,反之全部转为奇数。

同时也可以用简单的容斥思想,每次计算左上角为 1 的四个矩形的值并处理,但实现难度与此方法接近。

同时整个过程中仅需 long long 即可,等差数列求和的除以 2 不需要用逆元,适当取模后也不需要用 __int128_t

Code

UPD

update-2023_01_25 初稿