zoukankan      html  css  js  c++  java
  • 极角排序

    题意:逆时针绕圈,问最长怎么走
    https://vjudge.net/problem/POJ-1696

    int sgn(double x) {
    	if(fabs(x) < eps)return 0;
    	else return x<0?-1:1;
    }
    struct Point {
    	double x,y;
    	int id;
    	Point() {};
    	Point (double x,double y):x(x),y(y) {}
    	Point operator+(Point B) {
    		return Point(x+B.x,y+B.y);
    	}
    	Point operator-(Point B) {
    		return Point(x-B.x,y-B.y);
    	}
    	Point operator/(double k) {
    		return Point(x/k,y/k);
    	}
    	bool operator == (Point B) {
    		return sgn(x-B.x)==0&&sgn(y-B.y)==0;
    	}
    };
    
    struct Line {
    	Point p1,p2;
    	Line() {}
    	Line(Point p1,Point p2):p1(p1),p2(p2) {}
    };
    
    typedef Point Vector;
    
    double Dot(Vector A,Vector B) {
    	return A.x*B.x+A.y*B.y;
    }
    
    double Cross(Vector A,Vector B) {
    	return A.x*B.y-A.y*B.x;
    }
    double Distance(Point A,Point B) {
    	double xx = A.x - B.x;
    	double yy = A.y - B.y;
    	return sqrt(xx*xx+yy*yy);
    }
    int n;
    int pos;
    Point p[N];
    
    bool cmp(Point a,Point b) {
    	double t=Cross(a-p[pos],b-p[pos]);
    	if(sgn(t)==0)return Distance(p[pos],a)<Distance(p[pos],b);
    	else if(sgn(t)<0)return false;
    	return true;
    
    }
    void work() {
    	scanf("%d",&n);
    	double x,y;
    	for(int i=0; i<n; i++) {   //先找到左下角的点
    		scanf("%d%lf%lf",&p[i].id,&p[i].x,&p[i].y);
    //		if(p[i].x < p[0].x || (p[i].x == p[0].x
    //		                       && p[i].y < p[0].y))swap(p[0],p[i]);
            //注意,先判最下面再判最左边,不然wa
    	if(p[i].y < p[0].y || (p[i].y == p[0].y && p[i].x < p[0].x))swap(p[i],p[0]);
    	}
    	pos =0 ;
    	for(int i=1; i<n; i++) {
    		sort(p+i,p+n,cmp);
    		pos++;
    	}
    	printf("%d",n);
    	for(int i=0;i<n;i++){
    		printf(" %d",p[i].id);
    	}
    	printf("
    ");
    }
    
  • 相关阅读:
    Confluence wiki——CentOS6.8搭建详解
    ifconfig不显示网卡eth0
    VMware vSphere克隆虚拟机
    VMware ESXI6.0服务器安装
    虚拟化技术的基本介绍
    HTTP协议详解
    Shell中的case命令
    Linux通过ssh登录其他服务器,不用输入密码
    Linux下/etc/passwd、/etc/shadow、/etc/group文件
    Linux挂载详解
  • 原文地址:https://www.cnblogs.com/LaiYiC/p/15193877.html
Copyright © 2011-2022 走看看