zoukankan      html  css  js  c++  java
  • cf14C Four Segments(计算几何)

    题意:

    给四个线段(两个端点的坐标)。

    判断这四个线段能否构成一个矩形。(矩形的四条边都平行于X轴或Y轴)

    思路:

    计算几何

    代码:

    class Point{
    public:
        int x,y;
        void readd(int xx,int yy){
            x=xx;
            y=yy;
        }
    };
    
    class Segment{
    public:
        Point startt,endd;
        int length;
        int Type; //1:横 2:竖 -1:斜
        void readd(int x1,int y1,int x2,int y2){
            startt.readd(x1,y1);
            endd.readd(x2,y2);
            length=(int)sqrt((double)(x2-x1)*(x2-x1)+(double)(y2-y1)*(y2-y1));
        }
        int typeCheck(){
            Type=-1;
            if(startt.x==endd.x){
                Type=2;
            }
            if(startt.y==endd.y){
                Type=1;
            }
        }
    };
    Segment S[5];
    
    bool samePoint(Point a,Point b){
        if(a.x==b.x&&a.y==b.y){
            return true;
        }
        return false;
    }
    
    
    bool solve(){
        if(S[1].startt.y<S[2].startt.y){
            swap(S[1],S[2]);
        }
        if(S[1].startt.x>S[1].endd.x){
            swap(S[1].startt,S[1].endd);
        }
        if(S[2].startt.x>S[2].endd.x){
            swap(S[2].startt,S[2].endd);
        }
    
        if(S[3].startt.x>S[4].startt.x){
            swap(S[3],S[4]);
        }
        if(S[3].startt.y<S[3].endd.y){
            swap(S[3].startt,S[3].endd);
        }
        if(S[4].startt.y<S[4].endd.y){
            swap(S[4].startt,S[4].endd);
        }
        if(samePoint(S[1].startt,S[3].startt)&&
            samePoint(S[1].endd,S[4].startt)&&
            samePoint(S[3].endd,S[2].startt)&&
            samePoint(S[2].endd,S[4].endd)
           ){
                return true;
           }
    
        return false;
    }
    
    
    
    bool cmp1(Segment a,Segment b){
        return a.Type<b.Type;
    }
    int main(){
    
        rep(i,1,4){
            int x1,y1,x2,y2;
            cin>>x1>>y1>>x2>>y2;
            S[i].readd(x1,y1,x2,y2);
            S[i].typeCheck();
        }
        rep(i,1,4){
            if(S[i].length==0 || S[i].Type==-1){
                puts("NO");
                return 0;
            }
        }
        sort(S+1,S+5,cmp1);
        if(!(S[1].length==S[2].length&&S[3].length==S[4].length)){
            puts("NO");
            return 0;
        }
        if(solve()){
            puts("YES");
        }
        else{
            puts("NO");
        }
        return 0;
    }
  • 相关阅读:
    几个shell自动化脚本(定期清理、磁盘空间、搜寻关键字)
    linux系统垃圾清理
    mysql出现Got error 28 from storage engine错误
    WebBindingInitializer学习
    Java多线程异步调度程序分析(二)
    自己封装的C#操作redis公共类
    Java多线程编程的常见陷阱(转)
    Java分布式优秀资源集合
    JVM GC之对象生死
    Java内存模型
  • 原文地址:https://www.cnblogs.com/fish7/p/4318377.html
Copyright © 2011-2022 走看看