首页 > 其他分享 >最小圆覆盖

最小圆覆盖

时间:2023-08-19 21:12:07浏览次数:33  
标签:Distance return 覆盖 leq int 样例 最小 ##

Smiling & Weeping

                 ---- 终于明白,有些路,只能一个人走。

                  那些邀约好同行的人,一起相伴雨季,

                  走过年华,但有一天终究会在某个渡口离散。

 

题目链接:https://www.luogu.com.cn/problem/P1742

题目简介:

# 最小圆覆盖

## 题目描述

给出N个点,让你画一个最小的包含所有点的圆。

## 输入格式

第一行一个整数 $N$ 表示点的个数。

接下来 $N$ 行每行两个实数 $x_i,y_i$ 表示点的坐标。最多两位小数。

## 输出格式

第一行一个实数表示圆的半径。

第二行两个实数表示圆心的坐标。

本题开启 spj,您的答案与标准答案误差不超过 $10^{-9}$ 时,视为正确。

## 样例 #1

### 样例输入 #1

```
6
8.0 9.0
4.0 7.5
1.0 2.0
5.1 8.7
9.0 2.0
4.5 1.0
```

### 样例输出 #1

```
5.0000000000
5.0000000000 5.0000000000
```

## 提示

对于 $100\%$ 的数据,$1\leq N\leq 10^5$,$|x_i|,|y_i|\leq 10^4$。

2022.2.26 添加 spj

Talk is cheap , show me the code

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define eps 1e-8
 4 const int N = 1e5+1;
 5 int sgn(double x){
 6     if(fabs(x) < eps) return 0;
 7     return x<0 ? -1 : 1;
 8 }
 9 struct Point{double x , y;};
10 double Distance(Point A, Point B){
11     return hypot(A.x-B.x , A.y-B.y);
12 }
13 Point circle_center(const Point a, const Point b, const Point c){
14     Point center;
15     double a1 = b.x-a.x , b1=b.y-a.y , c1=(a1*a1+b1*b1)/2;
16     double a2 = c.x-a.x , b2=c.y-a.y , c2=(a2*a2+b2*b2)/2;
17     double d = a1*b2 - a2*b1;
18     center.x = a.x+(c1*b2-c2*b1)/d;
19     center.y = a.y+(a1*c2-a2*c1)/d;
20     return center;
21 }
22 void min_cover_circle(Point *p , int n , Point &c, double &r){
23     random_shuffle(p , p+n);
24     c=p[0]; r=0;
25     for(int i = 1; i < n; i++){
26         if(sgn(Distance(p[i],c)-r) > 0) // 点p在圆外面
27         {
28             c=p[i]; r=0;
29             for(int j = 0; j < i; j++){
30                 if(sgn(Distance(p[j],c)-r)>0){
31                     c.x = (p[i].x+p[j].x)/2;
32                     c.y = (p[i].y+p[j].y)/2;
33                     r = Distance(p[j] , c);
34                     for(int k = 0; k < j; k++){
35                         if(sgn(Distance(p[k],c)-r) > 0) //两点不能确定圆,就三个点
36                         {
37                             c = circle_center(p[i] , p[j] , p[k]);
38                             r = Distance(p[i] , c);
39                         }
40                     }
41                 }
42             }
43         }
44     }
45 }
46 Point p[N];
47 int main()
48 {
49     int n;
50     scanf("%d",&n);
51     for(int i = 0; i < n; i++)
52         scanf("%lf%lf",&p[i].x,&p[i].y);
53     Point c; double r;
54     min_cover_circle(p,n,c,r);
55     printf("%.10f\n%.10f %.10f\n",r,c.x,c.y);
56     return 0;
57 }

万物皆有裂痕,那是光照进来的地方

文章到此结束,我们下次再见

标签:Distance,return,覆盖,leq,int,样例,最小,##
From: https://www.cnblogs.com/smiling-weeping-zhr/p/17643103.html

相关文章

  • 《剑指Offer》-40-最小的 K 个数
    如果直接调用sortAPI然后要几个打印几个就没意思了,应该是和某个排序的内部过程结合首先排除O(N2)的低效率排序算法,最先想到的其实是堆排序,小根堆,但是需要额外的空间其次像快排、归并这样的也不合适……我想到了可以这样,快排第一轮划分之后,将部分舍去……应该就是这样了,堆排......
  • 给定n个多种颜色的球,如何将球分组,保证每组内球颜色不能相同,且分组的数量要最小。
    usingSystem;usingSystem.Collections.Generic;publicclassBallColorGroup{publicintColor{get;set;}publicintCount{get;set;}}publicclassBallColorGrouping{publicstaticList<List<int>>GroupBalls(List<int&g......
  • 静态代码测试工具HelixQAC新版对MISRA C规则提供100%覆盖率
    HelixQAC 2023.2中的新增功能HelixQAC2023.2对MISRAC:2012和MISRAC:2023规则提供了100%的覆盖率,并更新了相应的合规性模块以适用于MISRAC:2023。此外,此版本还包括改进的C23语言支持、对Validate平台的改进和HelixQAC和Validate的集成,以及其他质量增强功能。......
  • git本地代码推送到远程仓库的指定分支并进行强制覆盖
     1、关联远程仓库:如果还没有关联远程仓库,可以使用以下命令将本地仓库关联到远程仓库:gitremoteaddorigin<远程仓库URL>其中,origin是远程仓库的别名,你可以自行命名2、切换到要推送的分支:确保你在本地切换到了要推送的分支。如果没有该分支,可以使用以下命令创建并切换......
  • 跨平台开发:让你的直播带货App覆盖更多用户
    随着移动互联网的迅猛发展,直播带货成为了商业模式的一大亮点。无论是品牌还是个人商家,都希望通过直播带货来吸引更多用户,增加销售额。然而,要实现这一目标,一个重要的考虑因素就是如何让你的直播带货App覆盖更多的用户。跨平台开发技术就成为了一个解决方案,它可以帮助你的App在不同的......
  • Linux下cp -rf总是提示覆盖的解决办法
    通常情况下使用cp-rf进行文件或者文件夹的管理时一般就不再提醒是否覆盖。然而在内网的一台机器上使用cp-rf却提示是否覆盖。难道和常用的命令不同?[root@xxxxtest]#cp-rf./files/./bak/cp:是否覆盖"./bak/files/test.txt"?cp:是否覆盖"./bak/files/hh.txt"?cp:是否覆盖".......
  • AcWing 858. Prim算法求最小生成树
    题目给定一个$n$个点$m$条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图$G=(V,E)$,其中$V$表示图中点的集合,$E$表示图中边的集合,$n=|V|,m=|E|$。由$V$中的全部$n$个......
  • 最小表示法学习笔记
    定义一个字符串\(S\)的最小表示法为该字符串所有循环同构字符串中字典序最小的一个。比如:\(abca\),对于他,循环同构字符串就有\(aabc\),\(caab\),\(bcaa\),其中字典序最小的是\(aabc\)。那么我们说\(aabc\)就是\(abca\)最小表示法。算法流程介绍考虑对于一对子串\(A,B\),......
  • 为什么 setTimeout 有最小时延 4ms ?为什么是4
     写的超级棒,是我要找的答案,转载原文链接:掘金https://zhuanlan.zhihu.com/p/639441280正文在前端技术圈子里面,对于setTimeout常常有一句结论,“setTimeout的最小设置延迟是4ms”。按照“某乎”的方式,在回答一个问题之前得“先看是不是”,“再看对不对或为什么”。我......
  • 整数划分问题(完全背包)(总方案数和最小方案数)
    完全背包解决整数划分问题:总方案数:完全背包:在前i个数中选,且总和恰好等于j的方案数f[i][j]=f[i-1][j]+f[i-1][j-v]化成一维:f[j]+=f[j-v];这种求总方案数的情况需要把f初始化为0,然后f[0]初始化为1,最后累加f[j]900.整数划分这里从小到大枚举i,用到的v就是枚举......