题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2056
分析:
矩形重叠情况大致这么几种。观察重叠部分的可以发现重叠形成的矩形的副对角线两点的坐标与已知两矩形的坐标有关系,即
double minx = max(x1, x3);
double maxx = min(x2, x4);
double miny = max(y1, y3);
double maxy = min(y2, y4);
由于输入的时候不一定是左下定点在前,右上定点在后,所以需要先转换一下, 同时还要考虑两矩形不相交的情况
code:
#include <cstdio>
using namespace std;
void trans(double &a, double &b)
{
double tmp = a;
a = b;
b = tmp;
}
int main()
{
double x1, y1, x2, y2, x3, y3, x4, y4;
while(scanf("%lf %lf %lf %lf %lf %lf %lf %lf", &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4) != EOF)
{
if(x1 > x2) trans(x1, x2);
if(x3 > x4) trans(x3, x4);
if(y1 > y2) trans(y1, y2);
if(y3 > y4) trans(y3, y4);
double minx = x1 > x3 ? x1 : x3;
double maxx = x2 < x4 ? x2 : x4;
double miny = y1 > y3 ? y1 : y3;
double maxy = y2 < y4 ? y2 : y4;
if(minx > maxx || miny > maxy)
printf("0.00\n");
else
{
printf("%.2lf\n", (maxx - minx) * (maxy - miny));
}
}
return 0;
}