HDU-2056-Rectangles
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=2056
题意 : 给你两个矩形,的两个点,每个矩形的两个点是这个矩形的对角线的两个点。
把一个矩形的对角线的两个点经过如下变换
即可化两点为左下,和右上的两个点。以便于解题。
n1=min(x1,x2); m1=min(y1,y2);
n2=max(x1,x2); m2=max(y1,y2);
n3=min(x3,x4); m3=min(y3,y4);
n4=max(x3,x4); m4=max(y3,y4);
先排除不交的情况即
if(n1>=n4||m1>=m4||n3>=n2||m3>=m2)
printf("0.00\n");
这四种情况;
看代码
#include<stdio.h>
#include<iostream>
using namespace std;
int main(void)
{
double x1,x2,x3,x4,y1,y2,y3,y4;
double n1,m1,n2,m2,n3,m3,n4,m4;
double h,d,s;
while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4)
{
n1=min(x1,x2); m1=min(y1,y2);
n2=max(x1,x2); m2=max(y1,y2);
n3=min(x3,x4); m3=min(y3,y4);
n4=max(x3,x4); m4=max(y3,y4);
if(n1>=n4||m1>=m4||n3>=n2||m3>=m2)
printf("0.00\n");
else
{
d=min(m2,m4)-max(m3,m1);//求高;
h=min(n2,n4)-max(n3,n1);//求宽;
s=h*d;
printf("%.2lf\n",s);
}
}
return 0;
}
思维问题,想明白再来做。实实在在。