题面

传送门

题解

不难发现最小圆覆盖的随机增量法复杂度还是正确的

所以现在唯一的问题就是给定若干个点如何求一个\(m\)维的圆

其实就是这一题

  1. //minamoto
  2. #include<bits/stdc++.h>
  3. #define R register
  4. #define inline __inline__ __attribute__((always_inline))
  5. #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
  6. #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
  7. #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
  8. using namespace std;
  9. char buf[1<<21],*p1=buf,*p2=buf;
  10. inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
  11. int read(){
  12. R int res,f=1;R char ch;
  13. while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
  14. for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
  15. return res*f;
  16. }
  17. double readdb()
  18. {
  19. R double x=0,y=0.1,f=1;R char ch;
  20. while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
  21. for(x=ch-'0';(ch=getc())>='0'&&ch<='9';x=x*10+ch-'0');
  22. for(ch=='.'&&(ch=getc());ch>='0'&&ch<='9';x+=(ch-'0')*y,y*=0.1,ch=getc());
  23. return x*f;
  24. }
  25. const int N=2e4+5;const double eps=1e-8;
  26. inline int sgn(double x){return x<-eps?-1:x>eps;}
  27. int n,k;
  28. struct node{
  29. double a[9];
  30. inline double &operator [](const int &x){return a[x];}
  31. inline node operator +(node &b)const{
  32. node c;
  33. fp(i,1,k)c[i]=a[i]+b[i];
  34. return c;
  35. }
  36. inline node operator -(node &b)const{
  37. node c;
  38. fp(i,1,k)c[i]=a[i]-b[i];
  39. return c;
  40. }
  41. inline double operator ^(node &b)const{
  42. double res=0;
  43. fp(i,1,k)res+=a[i]*b[i];
  44. return res;
  45. }
  46. inline node operator *(const double &b)const{
  47. node c;
  48. fp(i,1,k)c[i]=a[i]*b;
  49. return c;
  50. }
  51. inline double norm()const{
  52. double res=0;
  53. fp(i,1,k)res+=a[i]*a[i];
  54. return res;
  55. }
  56. }p[N],c[N],o;
  57. double a[9][9],r;
  58. void Gauss(int n){
  59. fp(i,1,n){
  60. int k=i;
  61. fp(j,i+1,n)if(fabs(a[j][i])>fabs(a[k][i]))k=j;
  62. if(i!=k)fp(j,i,n+1)swap(a[i][j],a[k][j]);
  63. double t=1.0/a[i][i];
  64. fp(j,i,n+1)a[i][j]*=t;
  65. fp(j,i+1,n)fd(k,n+1,i)a[j][k]-=a[j][i]*a[i][k];
  66. }
  67. fd(i,n,1){
  68. if(!sgn(a[i][i])){a[i][i]=0;continue;}
  69. double t=1.0/a[i][i];
  70. fd(j,i-1,1)fd(k,n+1,i)a[j][k]-=a[i][k]*t*a[j][i];
  71. a[i][n+1]*=t;
  72. }
  73. }
  74. void circle(int n){
  75. if(n==0)return o=c[1],r=0,void();
  76. if(n==1)return o=c[1],r=0,void();
  77. if(n==2)return o=(c[1]+c[2])*0.5,r=(o-c[1]).norm(),void();
  78. fp(i,2,n)c[i]=c[i]-c[1];
  79. fp(i,2,n)fp(j,i,n)a[i-1][j-1]=a[j-1][i-1]=(c[i]^c[j])*2;
  80. fp(i,2,n)a[i-1][n]=c[i]^c[i];
  81. Gauss(n-1);
  82. o=c[1];
  83. fp(i,2,n)o=c[i]*a[i-1][n]+o;
  84. r=(o-c[1]).norm();
  85. fp(i,2,n)c[i]=c[i]+c[1];
  86. }
  87. void solve(int n,int cnt){
  88. circle(cnt);
  89. fp(i,1,n)if(sgn((p[i]-o).norm()-r)>0)
  90. c[cnt+1]=p[i],solve(i-1,cnt+1);
  91. }
  92. int main(){
  93. // freopen("testdata.in","r",stdin);
  94. srand(20030719);
  95. n=read(),k=read();
  96. fp(i,1,n)fp(j,1,k)p[i][j]=readdb();
  97. random_shuffle(p+1,p+1+n);
  98. solve(n,0);
  99. fp(i,1,k)printf("%.6lf%c",o[i]," \n"[i==k]);
  100. return 0;
  101. }

LOJ#6360. 复燃「恋之埋火」(最小圆覆盖+高斯消元)的更多相关文章

  1. LG2447/BZOJ1923 「SDOI2010」外星千足虫 高斯消元

    问题描述 LG2447 BZOJ1923 题解 显然是一个高斯消元,但是求的东西比较奇怪 发现这个方程组只关心奇偶性,于是可以用一个\(\mathrm{bitset}\)进行优化,用xor来进行消元操 ...

  2. LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元

    问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_ ...

  3. 洛谷P4457/loj#2513 [BJOI2018]治疗之雨(高斯消元+概率期望)

    题面 传送门(loj) 传送门(洛谷) 题解 模拟赛的时候只想出了高斯消元然后死活不知道怎么继续--结果正解居然就是高斯消元卡常? 首先有个比较难受的地方是它一个回合可能不止扣一滴血--我们得算出\( ...

  4. LOJ 2542 「PKUWC2018」随机游走 ——树上高斯消元(期望DP)+最值反演+fmt

    题目:https://loj.ac/problem/2542 可以最值反演.注意 min 不是独立地算从根走到每个点的最小值,在点集里取 min ,而是整体来看,“从根开始走到点集中的任意一个点就停下 ...

  5. BZOJ3601. 一个人的数论(狄利克雷卷积+高斯消元)及关于「前 $n$ 个正整数的 $k$ 次幂之和是关于 $n$ 的 $k+1$ 次多项式」的证明

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3601 题解 首先还是基本的推式子: \[\begin{aligned}f_d(n) &a ...

  6. loj2542 「PKUWC2018」随机游走 MinMax 容斥+树上高斯消元+状压 DP

    题目传送门 https://loj.ac/problem/2542 题解 肯定一眼 MinMax 容斥吧. 然后问题就转化为,给定一个集合 \(S\),问期望情况下多少步可以走到 \(S\) 中的点. ...

  7. 「ZOJ 1354」Extended Lights Out「高斯消元」

    题意:给定一个\(5\times 6\)的棋盘的\(01\)状态,每次操作可以使它自己和周围四个格子状态取反,求如何操作,输出一个\(01\)矩阵 题解:这题可以通过枚举第一行的状态然后剩下递推来做, ...

  8. 「BZOJ 3270」博物馆「高斯消元」

    应该算高斯消元经典题了吧. 题意:一个无向连通图,有两个人分别在\(s,t\),若一个人在\(u\),每一分钟有\(p[u]\)的概率不动,否则随机前往一个相邻的结点,求在每个点相遇的概率 题解: 首 ...

  9. LG3389 「模板」高斯消元法 高斯消元

    问题描述 LG3389 题解 高斯消元,是用来解\(n\)元一次方程组的算法,时间复杂度\(O(n^3)\) 这样就构造出了这个方程组的矩阵 目标就是把这个矩阵左边\(n \times n\)消为单位 ...

随机推荐

  1. filebeat 笔记

    认识Beats Beats是用于单用途数据托运人的平台.它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch. (画外音:通俗地理解,就是采集数据 ...

  2. NPOI工具类

    NPOI调用方法 DataTable dt = new DataTable(); Dictionary<string, string> header = new Dictionary< ...

  3. 安装labelImg

    上篇文章,我提到了安装这个工具时,遇到pyqt与sip版本不匹配的未解决问题,最后是通过windows版本一键实现的,工具包见下面链接. 参考:http://blog.csdn.net/jesse_m ...

  4. VMTurbo采用红帽企业虚拟化软件

    VMTurbo公司正处于虚拟化的开始阶段,并将继续向虚拟世界迈进.该公司已宣布官方支持Red Hat 公司的Enterprise Virtualization 3.1.VMTurbo公司采用Red H ...

  5. Qt的安装和使用中的常见问题(简略版)

    对于喜欢研究细节的朋友,可参考Qt的安装和使用中的常见问题(详细版). 目录 1.引入 2.Qt简介 3.Qt版本 3.1 查看安装的Qt版本 3.2 查看当前项目使用的Qt版本 3.3 查看当前项目 ...

  6. 解决 Windows 系统使用 Homestead 运行 Laravel 本地项目响应缓慢问题

    laravel-china.com: https://laravel-china.org/articles/9009/solve-the-slow-response-problem-of-window ...

  7. c#解决Nullable类型的转换 (包含DataContract的序列化和反序列化以及 该例子应用在反射属性setvalue的时候有用)

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflect ...

  8. json解析2

    客户端与服务器进行数据交互时,常常需要将数据在服务器端将数据转化成字符串并在客户端对json数据进行解析生成对象.但是用jsonObject和jsonArray解析相对麻烦.利用Gson和阿里的fas ...

  9. java并发编程实战:第十五章----原子变量与非阻塞机制

    非阻塞算法:使用底层的原子机器指令(例如比较并交换指令)代替锁来确保数据在并发访问中的一致性 应用于在操作系统和JVM中实现线程 / 进程调度机制.垃圾回收机制以及锁和其他并发数据结构 可伸缩性和活跃 ...

  10. java try catch finally return执行

    public static int testBasic(){ int i = 1; try{ i++; System.out.println("try block, i = "+i ...