zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    JavaEE XML XSL转换(XSLT)
    Java 并发 中断线程
    Java 并发 线程同步
    Java 并发 关键字volatile
    Java 并发 线程的优先级
    Java 并发 线程属性
    Java 并发 线程的生命周期
    Java NIO Channel和Buffer
    Java NIO Channel之FileChannel [ 转载 ]
    VUE CLI3 less 全局变量引用
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/5475168.html
Copyright © 2011-2022 走看看