HDU 2056 Rectangles

题目描述:给你两个矩形的对角线上的两个点的坐标,求出这两个矩形的公共部分的面积。

解题报告:觉得这题TMD好坑,example里面两个都是给出左下角和右上角的点的坐标,但是测试数据里面给出的数据是随机的,就是说两条对角线是任意给出的。一开始没有考虑到,弄得到现在才过,这题其实很水,主要就是要求两个区间的交集,写出求交集的函数就好办了,代码附上。

 1 #include<cstdio>
 2 #include<iostream>
 3 
 4 double judge(double x1,double x2,double x3,double x4) {//求交集函数 
 5     if(x3<=x4&&x4<=x1&&x1<=x2)     //枚举两个区间六中可能的情况,实在 
 6     return 0;
 7     else if(x3<=x1&&x1<=x4&&x4<=x2)
 8     return 1.0*(x4-x1);
 9     else if(x1<=x3&&x3<=x4&&x4<=x2)
10     return 1.0*(x4-x3);
11     else if(x3<=x1&&x1<=x2&&x2<=x4)
12     return 1.0*(x2-x1);
13     else if(x1<=x3&&x3<=x2&&x2<=x4)
14     return 1.0*(x2-x3);
15     else if(x1<=x2&&x2<=x3&&x3<=x4)
16     return 0;
17 }
18 int main() {
19     double x1,y1,x2,y2,x3,y3,x4,y4;
20     while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)!=EOF) {
21         if(x1>x2)     //这步很重要,就是少了这步,让我无限WA 
22         std::swap(x1,x2);
23         if(y1>y2)      //就是考虑对角线不是坐下家跟右上角的情况 
24         std::swap(y1,y2);
25         if(x3>x4)
26         std::swap(x3,x4);
27         if(y3>y4)
28         std::swap(y3,y4);
29         double x = judge(x1,x2,x3,x4);
30         double y = judge(y1,y2,y3,y4);
31         printf("%.2lf
",x*y);
32     }
33     return 0;
34 }
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3216508.html