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);
    }
}


目录
相关文章
|
数据安全/隐私保护 Python
Python海康威视批量扫弱密码
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396335 是Python2还是3我给忘记了,大家自己试试吧。
2688 0
|
测试技术 Windows
Windows下安装NTP服务器
原文:Windows下安装NTP服务器 NTP服务器介绍 NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒)。
3572 0
|
12月前
|
前端开发 UED 容器
使用 Flex 布局实现垂直居中效果
【10月更文挑战第7天】
1171 57
|
10月前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
8444 18
资料合集|Flink Forward Asia 2024 上海站
|
12月前
|
缓存
CORS 报错的常见原因
【10月更文挑战第6天】
|
10月前
|
运维 监控 Ubuntu
【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出
通过设置内存守护进程,可以有效监控和管理系统内存使用情况,防止内存溢出带来的系统崩溃和服务中断。本文介绍了如何在Ubuntu中编写和配置内存守护脚本,并将其设置为systemd服务。通过这种方式,可以在内存使用超过设定阈值时自动采取措施,确保系统稳定运行。
353 4
|
存储 Python
python 高效求解质数-- 埃氏筛法
python 高效求解质数-- 埃氏筛法
449 0
python 高效求解质数-- 埃氏筛法
|
存储 Java 应用服务中间件
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
Java规则引擎Drools急速入门
|
算法 安全 网络协议
一文搞懂SSL/TLS
一文搞懂SSL/TLS
1160 0
一文搞懂SSL/TLS
|
SQL 关系型数据库 MySQL
【数据库】MySQL表的增删改查(基础命令详解)
【数据库】MySQL表的增删改查(基础命令详解)