HDU 2056 Rectangles

第二次写的代码:


#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
struct node
{
    double x,y;

};
bool cmpx (node a,node b)
{
    return a.x<b.x;
}
bool cmpy (node a,node b)
{
    return a.y<b.y;
}
int main()
{
    int i,j;
    node m[4];
    while(cin>>m[0].x>>m[0].y>>m[1].x>>m[1].y>>m[2].x>>m[2].y>>m[3].x>>m[3].y)
    {
        sort(m,m+2,cmpx);
        if((m[1].y-m[0].y)/(m[1].x-m[0].x)<0)
        {
            swap(m[1].y,m[0].y);
        }
        sort(m+2,m+4,cmpx);
        if((m[3].y-m[2].y)/(m[3].x-m[2].x)<0)
        {
            swap(m[3].y,m[2].y);
        }
  //      cout<<m[0].y<<m[1].y<<m[2].y<<m[3].y;
        double x1,x2,x3,x4,y1,y2,y3,y4;
        x1=m[0].x; y1=m[0].y;
        x2=m[1].x; y2=m[1].y;
        x3=m[2].x; y3=m[2].y;
        x4=m[3].x; y4=m[3].y;
        sort(m,m+4,cmpx);
        if(m[1].x!=x2&&m[1].x!=x4)
        {
            x1=m[1].x;x2=m[2].x;
            sort(m,m+4,cmpy);
            if(m[1].y!=y2&&m[1].y!=y4)
            {
                y1=m[1].y;y2=m[2].y;
                printf("%.2lf\n",(y2-y1)*(x2-x1));
            }
            else cout<<"0.00"<<endl;
        }
        else cout<<"0.00"<<endl;
    }
    return 0;
}

第一次写的代码

#include<stdio.h>
#include<math.h>
int main()
{
    double x1,y1,x2,y2,x3,y3,x4,y4;
    while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)!=EOF)
    {
        if(x1>x2){
            x1=x1+x2;
            x2=x1-x2;
            x1=x1-x2;
        
        }    
        if(y1>y2){
                y1=y1+y2;
                y2=y1-y2;
                y1=y1-y2;
            }
        if(x3>x4){
            x3=x3+x4;
            x4=x3-x4;
            x3=x3-x4;
            
        }
        if(y3>y4){
                y3=y3+y4;
                y4=y3-y4;
                y3=y3-y4;
            }
        double maxy,maxx;
        maxx=x1>x3?x1:x3;
        maxy=y1>y3?y1:y3;
    
        double minx,miny;
        minx=x2<x4?x2:x4;
        miny=y2<y4?y2:y4;
        if(minx<=maxx||miny<=maxy)
            printf("0.00\n");
        else{
            double s=fabs((miny-maxy))*fabs(minx-maxx);
            printf("%.2f\n",s);
        }
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值