杭电acm2056 矩形重叠面积

来源:互联网 发布:系列电影 知乎 编辑:程序博客网 时间:2024/06/10 19:40

刚开始直接找的坐标差,排序,求面积。
结果跟示例一样却不对

#include<iostream>#include<iomanip>using namespace std;int main(){    double x1,x2,x3,x4,y1,y2,y3,y4,temp;    while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4)    {        double a[4],b[4];        a[0]=x1;a[1]=x2;a[2]=x3;a[3]=x4;        b[0]=y1;b[1]=y2;b[2]=y3;b[3]=y4;        for(int i=0;i<4;i++)        {            for(int j=i+1;j<4;j++)            {                if(a[i]>a[j])                {                    temp=a[i];                    a[i]=a[j];                    a[j]=temp;                }            }        }        for(int i=0;i<4;i++)        {            for(int j=i+1;j<4;j++)            {                if(b[i]>b[j])                {                    temp=b[i];                    b[i]=b[j];                    b[j]=temp;                }            }        }        double s=(a[2]-a[1])*(b[2]-b[1]);        cout<<setprecision(2)<<std::fixed<<s<<endl;    }    return 0;}

后来才知道,没有排除矩形不重叠的情况

#include<iostream>#include<cmath>#include<algorithm>using namespace std;int main(){    double x1,y1,x2,y2,x3,y3,x4,y4;    double x[4],y[4];    double s,l,h;    while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4)    {        x[0]=x1;x[1]=x2;x[2]=x3;x[3]=x4;        y[0]=y1;y[1]=y2;y[2]=y3;y[3]=y4;        sort(x,x+4);        sort(y,y+4);        l=fabs(x2-x1)+fabs(x4-x3)-(x[3]-x[0]);        h=fabs(y2-y1)+fabs(y4-y3)-(y[3]-y[0]);        s=l*h;        if(l<=0 || h<=0)s=0.00;        printf("%.2lf\n",s);    }    return 0;}

这样就行了,两种输出两位小数的方法

原创粉丝点击