CF1080C Masha and two friends (矩阵的重叠面积)

Posted paulshi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1080C Masha and two friends (矩阵的重叠面积)相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

CF1080C Masha and two friends (矩阵的重叠面积)

题目链接:CF1080C

有关在坐标轴内矩阵的重叠覆盖,格点计算都是毒瘤题,但见到了还是要A的

这类题目一般会有一些化繁为简的技巧

这道题,是有关黑白格点的计算,我们可以利用容斥来做

首先我们记 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)

那么我们要求黑色点数只要求总点数减去白色格子点数即可

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int t;
 4 long long n,m,sx,sy,ex,ey,ans,xx,yy,Sx,Sy,Ex,Ey;
 5 int main()
 6 {
 7     scanf ("%d",&t);
 8     while (t--)
 9     {
10         scanf ("%d%d",&m,&n);
11         scanf ("%d%d%d%d",&sx,&sy,&ex,&ey);
12         ans=n*m/2;
13         xx=ex-sx+1,yy=ey-sy+1;
14         ans-=xx*yy/2;
15         if ((sy+sx)%2&&yy%2&&xx%2) ans--;
16         scanf ("%d%d%d%d",&Sx,&Sy,&Ex,&Ey);
17         xx=Ex-Sx+1,yy=Ey-Sy+1;
18         ans+=xx*yy/2;
19         if (!((Sy+Sx)%2)&&yy%2&&xx%2) ans++;
20         if ((Ex<sx||ex<Sx)||(Ey<sy||ey<Sy))
21             printf ("%lld %lld
",n*m-ans,ans);
22         else
23         {
24             int ssx=max (sx,Sx),ssy=max (sy,Sy);
25             int eex=min (ex,Ex),eey=min (ey,Ey);
26             xx=eex-ssx+1,yy=eey-ssy+1;
27             ans+=xx*yy/2;
28             if ((ssy+ssx)%2&&yy%2&&xx%2) ans++;
29             printf ("%lld %lld
",n*m-ans,ans);
30         }
31     }
32     return 0;
33 }

 

---恢复内容结束---

以上是关于CF1080C Masha and two friends (矩阵的重叠面积)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #524 (Div. 2) C. Masha and two friends

「题解」CF620D Professor GukiZ and Two Arrays

CF #737(div2)A. Ezzat and Two Subsequences,贪心

Masha and Bears(翻译+思维)

[Codeforces]856D - Masha and Cactus

CF round 623 Div.1D Tourism 题解