Masha and two friends-矩形相交

  • Masha and two friends
  • 题意:先给出一个n行m列的矩阵,这个矩阵是黑白交错的,左下角是白的,然后再给出一个矩阵。
  • 这个矩阵就全部染成白色的,之后再给出一个矩阵,这个矩阵染成黑色的,数据范围是1e9。
  • 问最后白色块和黑色块分别由多少?
  • 坐标系中两矩形相交条件为:
  • min(xa2,xb2)>=max(xa1,xb1)&&min(ya2,yb2)>=max(ya1,yb1)
  • 其中:
  • xa1<=xa2,ya1<=ya2
  • xb1<=xb2,yb1<=yb2
  • #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    ll t,n,m,white,black;
    ll x[10],y[10],len1,len2;
    int main()
    {
        scanf("%lld",&t);
        while(t--)
        {
            scanf("%lld%lld",&n,&m);
            for(int i=1; i<=4; i++)
                scanf("%lld%lld",&x[i],&y[i]);
            white=(n*m+1)/2;
            len1=(x[2]-x[1]+1);
            len2=(y[2]-y[1]+1);
            if(len1%2&&len2%2&&x[1]%2==y[1]%2)white+=(len2*len1)/2;
            else white+=(len2*len1+1)/2;
            len1=(x[4]-x[3]+1);
            len2=(y[4]-y[3]+1);
            if(len1%2&&len2%2&&x[3]%2==y[3]%2)white-=(len2*len1+1)/2;
            else white-=(len2*len1)/2;
            x[5]=max(x[1],x[3]);
            x[6]=min(x[2],x[4]);
            y[5]=max(y[1],y[3]);
            y[6]=min(y[2],y[4]);
            if(x[5]<=x[6]&&y[5]<=y[6])
            {
                len1=(x[6]-x[5]+1);
                len2=(y[6]-y[5]+1);
                if(len1%2&&len2%2&&x[5]%2==y[5]%2)white-=(len2*len1)/2;
                else white-=(len2*len1+1)/2;
            }
            printf("%lld %lld\n",white,n*m-white);
        }
        return 0;
    }
  •  

猜你喜欢

转载自blog.csdn.net/BePosit/article/details/85221041
two