Description
题目链接:Codeforces 1080C
在一个 $n\times m$ 的国际象棋棋盘内,其中 $(1,1)$ 的格子为白色,首先将一个子矩形全都染成白色,再将一个子矩形全都染成黑色(两次染色有先后顺序)。求最后有多少个白色格子和黑色格子。
本题 $T$ 组数据。
数据范围:$1\le T\le 10^3$,$1\le n,m\le 10^9$
Solution
因为只有两次染色,所以我们只需要分类讨论就行了!
首先我们记 $B(x_1,y_1,x_2,y_2)$ 和 $W(x_1,y_1,x_2,y_2)$ 分别为矩形 $(x_1,y_1),(x_2,y_2)$ 内的黑色和白色格子数量。经过推算我们可以得到,白色格子的增量为:$B(x_1,y_1,x_2,y_2)-B((x_1,y_1,x_2,y_2)\cap(x_3,y_3,x_4,y_4))-W(x3,y3,x4,y4)$。其中第二项括号内的 $\cap$ 表示两个矩形的交集(如果没有交集,则第二项的值为 $0$)。
对于如何求 $B$ 和 $W$,直接分类讨论或者拆成 $4$ 个矩形容斥均可!
时间复杂度:$O(T)$
Code
1 |
|