Masha and two friends

题目:https://www.luogu.org/problemnew/show/CF1080C

题意:一个n*m的黑白相间棋盘,输入四个点,两个点构成一个矩形,第一个矩形把相应位置涂成白色,第二个矩形把相应位置涂成黑色,而且黑色能覆盖白色,要求输出黑色和白色格子的数量。

题解:
注意细节就行,分两种情况,一种是两个矩形没有相交,另一种是两个矩形相交,黑色会把第一个矩形的白色覆盖成黑色。

#include<iostream> //Q
#include<algorithm>
using namespace std;
long long x[4],y[4];
long long white,black;
int main()
{
    std::ios::sync_with_stdio(false);
    long long n;
    cin>>n;
    while(n--)
    {
        long long a,b;
        cin>>a>>b;
        for(int i=0;i<4;i++)
            cin>>x[i]>>y[i];
        long long row,cow;
        white=(a*b+1)/2;
        row=x[1]-x[0]+1;
        cow=y[1]-y[0]+1;
        if(row%2&&cow%2&&x[0]%2==y[0]%2)
            white+=(row*cow)/2;
        else
            white+=(row*cow+1)/2;
        row=x[3]-x[2]+1;
        cow=y[3]-y[2]+1;
        if(row%2&&cow%2&&x[2]%2==y[2]%2)
            white-=(row*cow+1)/2;
        else
            white-=(row*cow)/2;
        int x1=max(x[0],x[2]);
        int y1=max(y[0],y[2]);
        int x2=min(x[1],x[3]);
        int y2=min(y[1],y[3]);
        if(x1<=x2&&y1<=y2){
            row=x2-x1+1;
            cow=y2-y1+1;
            if(row%2&&cow%2&&x1%2==y1%2)
            white-=(row*cow)/2;
            else
            white-=(row*cow+1)/2;
        }
        cout<<white<<" "<<a*b-white<<endl;
    }
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值