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 ");

这四种情况;

看代码

#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 ");
else
{
d=min(m2,m4)-max(m3,m1);//求高;
h=min(n2,n4)-max(n3,n1);//求宽;
s=h*d;
printf("%.2lf ",s);
}
}
return 0;
}

思维问题,想明白再来做。实实在在。

原文地址:https://www.cnblogs.com/liudehao/p/4085072.html