• hihoCoder #1040 (判断是否为矩形)


    题目大意:给四条线段,问能否构成一个矩形?

    题目分析:先判断能否构成四边形,然后选一条边,看另外三条边中是否为一条与他平行,两条垂直。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<cmath>
    # include<set>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    # define LL long long
    
    const double inf=1e20;
    const double eps=1e-20;
    
    struct Edge
    {
        LL x,y;
        double k;
    };
    Edge e[4];
    set<LL>s;
    
    double getK(int i)
    {
        if(e[i].x==0) return inf;
        return (double)e[i].y/(double)e[i].x;
    }
    
    bool ok(int i,int j)
    {
        return e[i].x*e[j].x+e[i].y*e[j].y==0ll;
    }
    
    bool judge()
    {
    	if(s.size()!=4) return false;
        int cnt1=0,cnt2=0;
    	for(int i=1;i<4;++i){
    		if(ok(0,i)) ++cnt1;
    		if(e[0].k==e[i].k) ++cnt2;
    	}
        return cnt1==2&&cnt2==1;
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            LL a,b,c,d;
    		s.clear();
            for(int i=0;i<4;++i){
                scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
    			s.insert(a*100000ll+b);
    			s.insert(c*100000ll+d);
    			e[i].x=c-a;
                e[i].y=d-b;
                e[i].k=getK(i);
            }
            if(judge()) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    用react的ReactCSSTransitionGroup插件实现简单的弹幕动画
    composer安装yii2问题总结
    记阿里笔试经历
    JVM, JRE,JDK 的区别
    HTML
    Http协议
    操作系统和网络基础知识
    网络基础之网络协议
    计算机硬件知识
    计算机硬件历史
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/5475168.html
Copyright © 2020-2023  润新知