pku1106Transmitters
2010-08-07 21:11
176 查看
题目链接:pku1106
题意:已知一半圆的圆心及半径,还有一些点,判断半圆中最多可有几个点。
本题难点在于将题意理解透彻,了解叉积的意义。
代码:叉积及判断点在圆内部
题意:已知一半圆的圆心及半径,还有一些点,判断半圆中最多可有几个点。
本题难点在于将题意理解透彻,了解叉积的意义。
代码:叉积及判断点在圆内部
]//1-150 unique point //先把到圆心距离大于半径的删除掉,枚举每个点所在的直径, //统计一下在其下方的点的个数,取最大值 #include <iostream> #include <cmath> using namespace std; struct point { double x,y; }; //判断点p是否在以c为圆心,r为半径的圆内 bool p_in_circle(point p,point c,double r) { if(sqrt((p.x-c.x)*(p.x-c.x)+(p.y-c.y)*(p.y-c.y))<=r) return true; return false; } double multi(point p0,point p1,point p2) { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } int main(int argc, char *argv[]) { point p[155],q[155]; double r; int n,ans,temp; int i,j,k; while(cin>>p[0].x>>p[0].y>>r) { if(r<0)break; cin>>n; for(i=1;i<=n;i++) cin>>p[i].x>>p[i].y;j=0; for(i=1;i<=n;i++) if(p_in_circle(p[i],p[0],r)==true)q[j++]=p[i]; ans=0; for(i=0;i<j;i++) { for(k=0,temp=0;k<j;k++) if(multi(p[0],q[k],q[i])>=0)temp++; if(temp>ans)ans=temp; } cout<<ans<<endl; } system("pause"); return 0; }
相关文章推荐
- pku 2948 Martian Mining DP (记忆化搜索)
- PKU 2828 Buy Tickets
- PKU 1177 Picture
- pku 1228 Grandpa's Estate .cpp
- PKU POJ 1017 Packets 产品包装问题
- 深度优先+回溯(1): pku acm 1020 Anniversary Cake
- pku3020 Antenna Placement
- pku 3155 Hard Life 最大密集子图
- PKU3667(Hotel)线段树
- PKU_1001_Exponentiation
- PKU 3624 Charm Bracelet
- PKU1062(昂贵的聘礼)单源点最短路径-Dijkstra算法
- PKU-1159 Palindrome (最长公共子序列LCS)
- pku 1562 Oil Deposits(典型的BFS)
- PKU-2243 Knight Moves (单BFS、双BFS)
- pku1860 Currency Exchange
- pku2153 Rank List
- http://dsec.pku.edu.cn/~yuhj/wiki/gdb.html
- pku 2187 Beauty Contest(凸包+卡壳旋转)
- pku 3164 Command Network(最小树形图)