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