UVa1606 Amphiphilic Carbon Molecules(计算几何)

Posted noble_

tags:

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

题目

题目

 


分析

跟着lrj学的,理解了,然而不是很熟,还是发上来供以后复习

 


 

代码

技术分享图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int maxn=1005;
 5 
 6 struct Point
 7 {
 8     int x,y;
 9     double rad;
10     bool operator < (const Point &rhs) const{
11         return rad<rhs.rad;
12     }
13 }op[maxn],p[maxn];
14 
15 int n,color[maxn];
16 
17 bool left(Point A,Point B)
18 {
19     return A.x*B.y - A.y*B.x >= 0;
20 }
21 
22 int solve()
23 {
24     if(n<=2) return 2;
25     int ans=0;
26     
27     for(int i=0;i<n;i++)
28     {
29         int k=0;
30         
31         //极角排序 
32         for(int j=0;j<n;j++)
33             if(j!=i)
34             {
35                 p[k].x=op[j].x-op[i].x;
36                 p[k].y=op[j].y-op[i].y;
37                 if(color[j])
38                 {
39                     p[k].x = -p[k].x; p[k].y = -p[k].y;
40                 }
41                 p[k].rad=atan2(p[k].y , p[k].x);
42                 k++;
43             }
44         sort(p,p+k);
45         
46         //滑动 
47         int L=0 , R=0 , cnt=2;
48         while(L < k)
49         {
50             if(R==L) {  R = (R+1)%k; cnt++;  }
51             while(R != L && left(p[L] , p[R]))
52             {
53                 R = (R+1)%k; cnt++;
54             }
55             cnt--; L++;
56             ans=max(ans,cnt);
57         }
58     }
59     return ans;
60 }
61 
62 int main()
63 {
64     while(scanf("%d",&n)==1 && n)
65     {
66         for(int i=0;i<n;i++)
67             scanf("%d%d%d", &op[i].x, &op[i].y, &color[i]);
68         printf("%d\n",solve());
69     }
70     return 0;
71 }
View Code

 

 

以上是关于UVa1606 Amphiphilic Carbon Molecules(计算几何)的主要内容,如果未能解决你的问题,请参考以下文章

UVa1606 Amphiphilic Carbon Molecules (扫描法+极角排序)

UVA - 1606 Amphiphilic Carbon Molecules (计算几何,扫描法)

UVA - 1606 Amphiphilic Carbon Molecules 极角扫描法

UVa 1606 两亲性分子

POJ1598 ZOJ1315 HDU1606 UVA409 UVALive5493 Excuses, Excuses!文本

最短前缀