• 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;
    }
  • 相关阅读:
    python 监听文件夹下的文件,将文本内容写入kafka,支持断电续传 (docker 发布)
    python监控目录和文件变化
    Python 单例
    Python 面向对象 继承
    Python 面向对象 多态
    Python 面向对象 类属性和类方法
    Python 基础2
    Python 面向对象
    【bird-front】全自动数据表格组件bird-grid
    【bird-java】bird-java系列文章汇总
  • 原文地址:https://www.cnblogs.com/fish7/p/4318377.html
Copyright © 2020-2023  润新知