hdu 1077 Catching Fish 计算几何+暴力枚举

简介:

   简单的暴力枚举,枚举两个点在圆上,用向量法求下圆心。复杂度o(n^3),但数据量只有300


/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#define INF 1E9
using namespace std;
double X[301],Y[301];
int n,ans;
double x,y;
inline double c(int i)
{
    return (X[i]-x)*(X[i]-x)+(Y[i]-y)*(Y[i]-y);
}
int calc()//计数
{
    int i,ans=0;
    for(i=0;i<n;i++)
    {
        if(c(i)>1.0+1e-8)continue;
        ans++;
    }
    return ans;
}
void center(int i,int j)//确定圆心
{
    double x1=X[i]-X[j],y1=Y[i]-Y[j],len,k;
    double a,b;//单位向量
    if(x1==0)
        a=1,b=0;
    else if (y1==0)
        a=0,b=1;
    else
    {
        k=-1/y1*x1;
        len=sqrt(1+k*k);
        a=1.0/len;
        b=k/len;
    }
    len=1-(x1*x1+y1*y1)/4;
    if(len<0)return;
    len=sqrt(len);
    x1=(X[i]+X[j])/2.0;y1=(Y[i]+Y[j])/2.0;
    a*=len;b*=len;
    x=x1+a;y=y1+b;
    ans=max(ans,calc());
    x=x1-a;y=y1-b;
    ans=max(ans,calc());
}
int main()
{
    int T;
    int i,j;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(i=0;i<n;i++)
          scanf("%lf%lf",&X[i],&Y[i]);
        ans=0;
        for(i=0;i<n;i++)
          for(j=i;j<n;j++)
             center(i,j);
        printf("%d\n",ans);
    }
}


目录
相关文章
|
Java
hdu1181 变形课(暴力搜索法)
hdu1181 变形课(暴力搜索法)
42 0
|
机器学习/深度学习
华为机试HJ53:杨辉三角的变形
华为机试HJ53:杨辉三角的变形
|
机器学习/深度学习 存储 算法
回溯法求解N皇后问题
回溯法求解N皇后问题
163 0
HDU7018.Banzhuan(计算几何+贪心)
HDU7018.Banzhuan(计算几何+贪心)
107 0
HDU7018.Banzhuan(计算几何+贪心)
每日一题1021:迭代法求平方根
题目描述: 用迭代法求 平方根 公式:求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值少于0.00001。 输出保留3位小数
165 0
|
机器学习/深度学习
HDOJ(HDU) 2524 矩形A + B(推导公式、)
HDOJ(HDU) 2524 矩形A + B(推导公式、)
103 0
HDOJ(HDU) 2524 矩形A + B(推导公式、)
|
C语言
HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)
HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)
101 0
|
Java
HDOJ/HDU 1865 1sting(斐波拉契+大数~)
HDOJ/HDU 1865 1sting(斐波拉契+大数~)
103 0
|
算法
回溯法解决N皇后问题
来源: 维基百科-N皇后问题 解题思路 采用回溯法,即逐一位置放置,然后放置下一行,如果下一行没有合法位置,则回溯到上一行,调整位置,直到得到所有值. 实现代码 /** * solve the N-Queen problem */ public class NQueen { //the ...
2503 0