kuangbin专题计算几何基础(极角相关)

Posted rentu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kuangbin专题计算几何基础(极角相关)相关的知识,希望对你有一定的参考价值。

 

 

 

 


 

【POJ 1696】 Space Ants

【题目大意】

 给定多个点,对他们按照下面的规则排序,每个都在前一个点组成的左边,并且连线不相交(典型如图)

【题目分析】

不断进行极角排序,不断选取一定区域内最符合要求的解

 

【代码】

 

技术图片
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #define ll double
 5 using namespace std;
 6 const double eps  = 1e-9;
 7 const int    MAXN = 1010;
 8 int sgn(ll x)
 9 
10     if (x > eps) return  1;
11     if (x < -eps)return -1;
12     return 0;
13 
14 struct P
15 
16     ll   x, y ;
17     int  index;
18     P() ;
19     P(double a, double b) :x(a), y(b) 
20     P      operator -(P a)  return P(x - a.x, y - a.y); 
21     double operator *(P a)  return x * a.x + y * a.y  ; 
22     double operator ^(P a)  return x * a.y - y * a.x  ; 
23 ;
24 struct L
25 
26     P s, t;
27     L() 
28     L(P a, P b) :s(a), t(b) 
29 ;
30 double dis(P a, P b)
31 
32     return (b - a)*(b - a);
33 
34 P   p[MAXN];
35 int pos;
36 bool cmp(P a, P b)
37 
38     int tmp = sgn((a - p[pos]) ^ (b - p[pos]));
39     if (tmp == 0)    return dis(b, p[pos]) > dis(a, p[pos]);
40     if (tmp <  0)   return false;
41                     return true;
42 
43 int main()
44 
45     int T;
46     scanf("%d", &T);
47     while (T--)
48     
49         int n;
50         scanf("%d", &n);
51         for (int i = 1; i <= n; i++)
52         
53             scanf("%d %lf %lf", &p[i].index, &p[i].x, &p[i].y);
54             if ((p[i].y == p[1].y && p[i].x < p[1].x )||(p[i].y<p[1].y))
55                 swap(p[1], p[i]);
56         
57         pos = 1;
58         for (int i = 2; i <= n; i++)
59         
60             sort(p+i,p+n+1,cmp);
61             pos++;
62         
63         printf("%d ", n);
64         for (int i = 1; i <= n; i++)
65         
66             printf("%d", p[i].index);
67             if (i != n)
68                 printf(" ");
69             else
70                 printf("\n");
71         
72     
73     return 0;
74 
View Code

 

 


 

以上是关于kuangbin专题计算几何基础(极角相关)的主要内容,如果未能解决你的问题,请参考以下文章

[POJ2007]Scrambled Polygon(计算几何 极角排序)

算法学习:计算几何基础

「kuangbin带你飞」专题十二 基础DP

[kuangbin]专题12 基础DP

Kuangbin专题12 基础DP

bzoj 5099 [POI2018]Pionek 计算几何 极角排序