(模拟)cf#514.C.Masha and two friends

https://codeforces.com/contest/1080/problem/C

比赛的时候手写相交判断写过样例就交了,发现wa了,然后去网上抄了个板子再交还是wa。自闭 。然后比赛完看错误原因发现n,m没开long long。但是还是发现板子要wa在第39个样例,手写判断能过。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 7;
int main()
{
    int t;
    ll n, m;
    cin >> t;
    while(t--) {
        cin >> n >> m;
        ll black = (n * m) / 2;
        ll white = n * m - black;
        ll x1, y1, x2, y2, x3, y3, x4, y4;
        cin >> x1 >> y1 >> x2 >> y2;
        ll w = x2 - x1 + 1, h = y2 - y1 + 1;
        if((x1 + y1) & 1) { //black more
            ll a = (w * h) / 2;
            ll b = w * h - a;
            black -= b;
            white += b;
        }
        else {
            ll b = (w * h) / 2;
            ll a = w * h - b;
            black -= b;
            white += b;
        }
        //cout << white << " " << black << endl;
        cin >> x3 >> y3 >> x4 >> y4;
        w = x4 - x3 + 1, h = y4 - y3 + 1;
        if((x3 + y3) & 1) {
            ll a = (w * h) / 2;
            black += a;
            white -= a;
        }
        else {
            ll b = (w * h) / 2;
            ll a = w * h - b;
            black += a;
            white -= a;
        }
        ll a = max(x1, x3), b = min(x2, x4), c = max(y1, y3), d = min(y2, y4);
        if(a <= b && c <= d) white -= ((b - a + 1) * (d - c + 1) + (a + c) % 2) / 2, black += ((b - a + 1) * (d - c + 1) + (a + c) % 2) / 2;
        //处理重复黑块
        cout << white << " " << black << endl;
    }
}

那个板子,不知道怎么错了

设A[x01,y01,x02,y02]  B[x11,y11,x12,y12].
矩形A和矩形B物理中心点X方向的距离为Lx:abs( (x01+x02)/2 – (x11+x12) /2)
矩形A和矩形B物理中心点Y方向的距离为Ly:abs( (y01+y02)/2 – (y11+y12) /2)
矩形A和矩形B X方向的边长为 Sax:abs(x01-x02)  Sbx: abs(x11-x12)
矩形A和矩形B Y方向的边长为 Say:abs(y01-y02)  Sby: abs(y11-y12)
如果AB相交,则满足下列关系:
Lx <= (Sax + Sbx)/2 && Ly <=(Say+ Sby)/2

猜你喜欢

转载自blog.csdn.net/weixin_40588429/article/details/84477735