杭电acm2056 矩形重叠面积

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

#include
#include
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<2)<<std::fixed<return 0;
}

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

#include
#include
#include
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;
}

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

你可能感兴趣的:(杭电acm2056 矩形重叠面积)