• [hihoCoder]矩形判断


    #1040 : 矩形判断

    时间限制:1000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形。

    输入

    输入第一行是一个整数T(1<=T<=100),代表测试数据的数量。

    每组数据包含4行,每行包含4个整数x1, y1, x2, y2 (0 <= x1, y1, x2, y2 <= 100000);其中(x1, y1), (x2,y2)代表一条线段的两个端点。

    输出

    每组数据输出一行YES或者NO,表示输入的4条线段是否恰好围成矩形。

    样例输入
    3
    0 0 0 1
    1 0 1 1
    0 1 1 1
    1 0 0 0
    0 1 2 3
    1 0 3 2
    3 2 2 3
    1 0 0 1
    0 1 1 0
    1 0 2 0
    2 0 1 1
    1 1 0 1
    
    样例输出
    YES
    YES
    NO

    题目链接:http://hihocoder.com/problemset/problem/1040

    解题思路:首先判断四个线段是否可以构成四边形,在判断构成的四边形是不是矩形。即用一个结构体存向量的x,y,只要判断有三个向量有两个相等并且有两个平方和等于另外一个平方就可以判断是矩形了;

    AC代码:

    #include<stdio.h>
    #include<math.h>
    struct Point
    {
        int x,y;
    }p[10];
    struct Dis
    {
        int xx,yy;
    }dis[10];
    
    int judge()
    {
        if(abs(dis[0].xx)==abs(dis[1].xx)&&abs(dis[0].yy)==abs(dis[1].yy)&&dis[0].xx*dis[2].xx+dis[0].yy*dis[2].yy==0&&dis[0].xx*dis[3].xx+dis[0].yy*dis[3].yy==0)
            return 1;
        if(abs(dis[0].xx)==abs(dis[2].xx)&&abs(dis[0].yy)==abs(dis[2].yy)&&dis[0].xx*dis[1].xx+dis[0].yy*dis[1].yy==0&&dis[0].xx*dis[3].xx+dis[0].yy*dis[3].yy==0)
            return 1;
        if(abs(dis[0].xx)==abs(dis[3].xx)&&abs(dis[0].yy)==abs(dis[3].yy)&&dis[0].xx*dis[2].xx+dis[0].yy*dis[2].yy==0&&dis[0].xx*dis[1].xx+dis[0].yy*dis[1].yy==0)
            return 1;
        return 0;
    }
    int main()
    {
        int i,j,tcase,len,tt,temp;
    
        scanf("%d",&tcase);
        while(tcase--)
        {
            temp=1;
            for(i=0;i<8;i++)
                scanf("%d%d",&p[i].x,&p[i].y);
            for(i=0;i<8;i++)
            {
                tt=0;
               for(j=0;j<8;j++)
               {
                   if(i==j) continue;
                   else if(p[i].x==p[j].x&&p[i].y==p[j].y)
                   {
                      tt++;
                      if(tt>=2)
                      {
                          temp=0;break;
                      }
                   }
               }
            }
            if(temp)
            {
                dis[0].xx=p[0].x-p[1].x;dis[0].yy=p[0].y-p[1].y;
                dis[1].xx=p[2].x-p[3].x;dis[1].yy=p[2].y-p[3].y;
                dis[2].xx=p[4].x-p[5].x;dis[2].yy=p[4].y-p[5].y;
                dis[3].xx=p[6].x-p[7].x;dis[3].yy=p[6].y-p[7].y;
                if(judge())
                    printf("YES
    ");
                else
                    printf("NO
    ");
            }
            else
                printf("NO
    ");
    
        }
        return 0;
    }
  • 相关阅读:
    模板语言的作用及实例
    模板语言
    轮播图实例
    render,render_to_redponse,locals,redirect重定向
    setting中三个重要参数
    python中的Celery基本使用
    python中的Redis基本使用
    DRF之JWT认证
    DRF之过滤排序分页异常处理
    DRF之权限和频率限制
  • 原文地址:https://www.cnblogs.com/gaojupeng/p/4439470.html
Copyright © 2020-2023  润新知