#include <cstdio>
#include <algorithm>
#define max(a,b) ( a>b ? a:b )
#define min(a,b) ( a<b ? a:b )
using namespace std;
int main()
{
int i;
double x[1000];
double y[1000];
double ans;
while(scanf("%lf %lf",&x[1],&y[1])!=EOF)
{
for(int i=2;i<=4;i++)
{
scanf("%lf %lf",&x[i],&y[i]);
}
if( min(x[1],x[2])>=max(x[3],x[4]) || min(x[3],x[4])>=max(x[1],x[2]) )
{
ans=0;
}
else if( min(y[1],y[2])>=max(y[3],y[4]) || min(y[3],y[4])>=max(y[1],y[2]) )
{
ans=0;
}
else
{
//double len=min(x[2],x[4])-max(x[1],x[3]);
//double height=min(y[2],y[4])-max(y[1],y[3]);
sort(x+1,x+4+1);
sort(y+1,y+4+1);
double len=x[3]-x[2];
double height=y[3]-y[2];
ans=len*height;
}
printf("%.2f\n",ans);
}
return 0;
}
已AC;
嗯 刚开始做这题时 脑子是空白的 后来参考了一些大牛的代码大概就想出来了。。。
矩形不重叠的情况很好分析 就不说了
而矩形如果重叠
注意对角线是从左下角到右上角 不管你矩形如何重叠谁上谁下谁左谁右 重叠的矩形的长依然是第三大的x减去第二大的x
高依然是第三大的y减去第二大的y
所以排个序 然后就做出来了。。。
附上原代码网址http://acm.hdu.edu.cn/discuss/problem/post/reply.php?postid=21781&messageid=1&deep=0