(模擬)cf#514.C.Masha and two friends
阿新 • • 發佈:2018-11-28
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