给你两个矩形,分别给你矩形的左下角和右上角,问你是否相交。
第一个矩形:(x1,y1),(x2,y2)
第二个矩形: (x3,y3),(x4,y4)
如果满足max(x1,x3)<=min(x2,x4)&&max(y1,y3)<=min(y2,y4),则相交。
具体链接:http://codeforces.com/contest/1080/problem/C
AC代码:
#include <bits/stdc++.h>
using namespace std;
# define ll long long
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ll n,m;
scanf("%lld %lld",&n,&m);
ll x1,y1,x2,y2;
ll x3,y3,x4,y4;
scanf("%lld %lld %lld %lld %lld %lld %lld %lld",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
ll white=0;
// if(n%2!=0&&m%2!=0)
// {
white=(n*m+1)/2;
// cout<<1<<" "<<white<<endl;
// }
// else
// white=(n*m)/2;
// int len1,len2;
if((x1%2+y1%2)==0||(x1%2+y1%2)==2)
{
white+=((x2-x1+1)*(y2-y1+1))/2;
}
else
white+=((x2-x1+1)*(y2-y1+1)+1)/2;
//cout<<2<<" "<<white<<endl;
if((x3%2+y3%2)==0||(x3%2+y3%2)==2)
{
white-=((x4-x3+1)*(y4-y3+1)+1)/2;
}
else
white-=((x4-x3+1)*(y4-y3+1))/2;
//cout<<3<<" "<<white<<endl;
ll x5,y5,x6,y6;
x5=max(x1,x3);
x6=min(x2,x4);
y5=max(y1,y3);
y6=min(y2,y4);
// cout<<white<<endl;
//cout<<x5<<" "<<y5<<endl<<x6<<" "<<y6<<endl;
if(x5<=x6&&y5<=y6)
{
if((x5%2+y5%2)==0||(x5%2+y5%2)==2)
{
white-=((x6-x5+1)*(y6-y5+1))/2;
}
else
white-=((x6-x5+1)*(y6-y5+1)+1)/2;
}
// cout<<white<<endl;
printf("%lld %lld\n",white,n*m-white);
}
return 0;
}