例题8-6 两性亲分子 UVa 1606
来源:互联网 发布:mac删除照片 编辑:程序博客网 时间:2024/05/22 10:47
分析:每次枚举一个点作为基准点,然后求其他点与这个基准点的夹角,再排一遍序,按照角度从小到大排序,接下来以基准点和其中一个点的连线开始逆时针扫描一遍,直到基准点和另一个点的连线和开始的那条线之间的角度大于等于180停止,这样就可以了,我也看了好一会儿题解才看懂,具体看代码。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define LL long longusing namespace std;const int maxn=1005;struct Point{ int x,y; double rad; bool operator<(const Point &rhs)const{ return rad<rhs.rad; }}op[maxn],p[maxn];int n,color[maxn];bool left(Point A,Point B){ return A.x*B.y-A.y*B.x>=0;}int solve(){ if(n<=2)return 2; int ans=0; for(int i=0;i<n;i++){ int k=0; for(int j=0;j<n;j++){ if(j!=i){ p[k].x=op[j].x-op[i].x; p[k].y=op[j].y-op[i].y; if(color[j]){ p[k].x=-p[k].x;p[k].y=-p[k].y; } p[k].rad=atan2(p[k].y,p[k].x); k++; } } sort(p,p+k); int L=0,R=0,cnt=2; while(L<k){ if(R==L){ R=(R+1)%k; cnt++; } while(R!=L&&left(p[L],p[R])){ R=(R+1)%k;cnt++; } cnt--; L++; ans=max(ans,cnt); } } return ans;}int main(){ while(scanf("%d",&n)&&n){ for(int i=0;i<n;i++) scanf("%d%d%d",&op[i].x,&op[i].y,&color[i]); printf("%d\n",solve()); } return 0;}
0 0
- 例题8-6 两性亲分子 UVa 1606
- 例题8-6 两亲性分子 UVa1606
- 例题8-6 两亲性分子(Amphiphilic Carbon Molecules, ACM/ICPC Shanghai 2004, UVa1606)
- 两亲性分子(Amphiphilic Carbon Molecules,Uva 1606)
- UVa 1606 两亲性分子 扫描法
- 例题6-8 树 UVa 548 Tree
- 例题8-1 UVA
- 例题6-3 UVa
- UVa 1606 两亲性分子 扫描法 && cnt++的分析
- 紫书动规 例题9-8 UVA
- 紫书动规 例题9-6 UVA
- 例题6-8 树(Tree, UVa 548)
- UVa #10603 Fill (例题7-8)
- UVa #11134 Fabled Rooks (例题8-4)
- UVa #11572 Unique Snowflakes (例题8-7)
- UVa #714 Copying Books (例题8-10)
- UVa #10954 Add All (例题8-11)
- UVa #12627 Erratic Expansion (例题8-12)
- 首字母变大写
- 内连接(INNER JOIN) 外连接(OUTER JOIN)补习
- Drawable加入动画机制(一)
- Rising Temperature
- apache多主机配置
- 例题8-6 两性亲分子 UVa 1606
- java的抽象类举例
- Slide Over
- Android:ViewPager制作幻灯片
- ***4.34-游戏:剪刀石头布
- MTK Battery系统
- 软件测试基础知识点
- Android多线程(二)
- 让你快速记住 UITableView 写法