poj2007 Scrambled Polygon【极角排序】

来源:互联网 发布:js防水涂料怎么用 编辑:程序博客网 时间:2024/06/06 02:40

题目链接:http://poj.org/problem?id=2007
题意:好像就是给你个凸包,然后输出极角排序后的结果
解析:极角排个序就好?

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>using namespace std;const int maxn = 1e5+100;const double eps = 1e-10;const double pi = acos(-1.0);struct point{    double x,y;    point() {}    point(double _x,double _y)    {        x = _x;        y = _y;    }    bool operator < (const point &b) const    {        if(y==b.y)            return x<b.x;        return y<b.y;    }}a[maxn],ans[maxn];double x_mul(point p0,point p1,point p2){    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);}double dis(point p1,point p2){    return sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));}bool cmp(point t1,point t2){    double tmp = x_mul(a[0],t1,t2);    if(tmp==0)        return dis(a[0],t1)<dis(a[0],t2);    else        return tmp>0;}void slove(int n){    //sort(a,a+n);    sort(a+1,a+n,cmp);    for(int i=0;i<n;i++)        printf("(%.0f,%.0f)\n",a[i].x,a[i].y);}int main(void){    int n = 0;    while(~scanf("%lf %lf",&a[n].x,&a[n].y))        n++;    slove(n);    return 0;}
0 0