HDU 1077Catching Fish(简单计算几何)
发布时间: 2013-10-15 16:47:37 作者: rapoo
HDU 1077Catching Fish(简单计算几何)
436.47634 7.696285.16828 4.799156.69533 6.2037867.15296 4.083286.50827 2.694665.91219 3.866615.29853 4.160976.10838 3.460396.34060 2.4159987.90650 4.017464.10998 4.183544.67289 4.018876.33885 4.283884.98106 3.827285.12379 5.164737.84664 4.676934.02776 3.87990206.65128 5.474906.42743 6.261896.35864 4.616116.59020 4.542284.43967 5.700594.38226 5.705365.50755 6.181637.41971 6.136686.71936 3.044965.61832 4.238575.99424 4.293285.60961 4.329986.82242 5.796835.44693 3.827246.70906 3.657367.89087 5.680006.23300 4.595305.92401 4.923296.24168 3.813896.22671 3.62210
25511
#include<iostream>#include<cstdio>#include<cmath>#include<cstdio>using namespace std;int n;double a[305][2];double dis(double *b1,double *b2){return sqrt((b1[0]-b2[0])*(b1[0]-b2[0])+(b1[1]-b2[1])*(b1[1]-b2[1]));}int cal(int p1,int p2){double t1[2],t2[2],t3[2],t4[2];t1[0]=a[p1][0],t1[1]=a[p1][1],t2[0]=a[p2][0],t2[1]=a[p2][1];double s,tmp,xx,yy;tmp=dis(t1,t2);s=tmp/2.0;s=sqrt(1.0-s*s); //s为圆心到t1,t2弦长的距离int ans1=0,ans2=0,i;xx=(t1[1]-t2[1])/tmp;yy=(t2[0]-t1[0])/tmp; //(xx,yy)相当于与弦长垂直的单位法向量t3[0]=(t1[0]+t2[0])/2.0,t3[1]=(t1[1]+t2[1])/2.0;t4[0]=t3[0]+s*xx,t4[1]=t3[1]+s*yy; //t4为圆心for(i=0;i<n;i++){if(dis(t4,a[i])<1.0001)ans1++;}t4[0]=t3[0]-s*xx,t4[1]=t3[1]-s*yy; //t4为圆心for(i=0;i<n;i++){if(dis(t4,a[i])<1.0001)ans2++;}return ans1>ans2?ans1:ans2;}int main(){int i,j;int tes;scanf("%d",&tes);while(tes--){ scanf("%d",&n);for(i=0;i<n;i++)scanf("%lf%lf",&a[i][0],&a[i][1]);int num;int res=1;for(i=0;i<n;i++)for(j=i+1;j<n;j++){ if(dis(a[i],a[j])<2.0001) {num=cal(i,j);if(num>res) res=num; }}printf("%d\n",res);} return 0;}//984MS G++