题面

传送门

题解

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

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

其实就是这一题

//minamoto
#include<bits/stdc++.h>
#define R register
#define inline __inline__ __attribute__((always_inline))
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
double readdb()
{
R double x=0,y=0.1,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(x=ch-'0';(ch=getc())>='0'&&ch<='9';x=x*10+ch-'0');
for(ch=='.'&&(ch=getc());ch>='0'&&ch<='9';x+=(ch-'0')*y,y*=0.1,ch=getc());
return x*f;
}
const int N=2e4+5;const double eps=1e-8;
inline int sgn(double x){return x<-eps?-1:x>eps;}
int n,k;
struct node{
double a[9];
inline double &operator [](const int &x){return a[x];}
inline node operator +(node &b)const{
node c;
fp(i,1,k)c[i]=a[i]+b[i];
return c;
}
inline node operator -(node &b)const{
node c;
fp(i,1,k)c[i]=a[i]-b[i];
return c;
}
inline double operator ^(node &b)const{
double res=0;
fp(i,1,k)res+=a[i]*b[i];
return res;
}
inline node operator *(const double &b)const{
node c;
fp(i,1,k)c[i]=a[i]*b;
return c;
}
inline double norm()const{
double res=0;
fp(i,1,k)res+=a[i]*a[i];
return res;
}
}p[N],c[N],o;
double a[9][9],r;
void Gauss(int n){
fp(i,1,n){
int k=i;
fp(j,i+1,n)if(fabs(a[j][i])>fabs(a[k][i]))k=j;
if(i!=k)fp(j,i,n+1)swap(a[i][j],a[k][j]);
double t=1.0/a[i][i];
fp(j,i,n+1)a[i][j]*=t;
fp(j,i+1,n)fd(k,n+1,i)a[j][k]-=a[j][i]*a[i][k];
}
fd(i,n,1){
if(!sgn(a[i][i])){a[i][i]=0;continue;}
double t=1.0/a[i][i];
fd(j,i-1,1)fd(k,n+1,i)a[j][k]-=a[i][k]*t*a[j][i];
a[i][n+1]*=t;
}
}
void circle(int n){
if(n==0)return o=c[1],r=0,void();
if(n==1)return o=c[1],r=0,void();
if(n==2)return o=(c[1]+c[2])*0.5,r=(o-c[1]).norm(),void();
fp(i,2,n)c[i]=c[i]-c[1];
fp(i,2,n)fp(j,i,n)a[i-1][j-1]=a[j-1][i-1]=(c[i]^c[j])*2;
fp(i,2,n)a[i-1][n]=c[i]^c[i];
Gauss(n-1);
o=c[1];
fp(i,2,n)o=c[i]*a[i-1][n]+o;
r=(o-c[1]).norm();
fp(i,2,n)c[i]=c[i]+c[1];
}
void solve(int n,int cnt){
circle(cnt);
fp(i,1,n)if(sgn((p[i]-o).norm()-r)>0)
c[cnt+1]=p[i],solve(i-1,cnt+1);
}
int main(){
// freopen("testdata.in","r",stdin);
srand(20030719);
n=read(),k=read();
fp(i,1,n)fp(j,1,k)p[i][j]=readdb();
random_shuffle(p+1,p+1+n);
solve(n,0);
fp(i,1,k)printf("%.6lf%c",o[i]," \n"[i==k]);
return 0;
}

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. jsp页面获取地址栏中的参数

  2. how to deal with EINTR fault

    [how to deal with EINTR fault] EINTR:interupted error.是指一个调用被信号给中断,对于同步的耗时调用来说,这个操作常见,譬如select.read. ...

  3. Android开发之百度地图的简单使用

    越来越多的App运用到了定位,导航的这些功能,其实实现一个自己的百度地图也是非常的简单,这篇博客将会教你简单的实现一个百度地图.看一下效果图: 第一步:要使用百度地图,必须要有百度地图的Key,要获得 ...

  4. webkit com wrapper 推荐!

    https://groups.google.com/forum/#!topic/microsoft.public.vb.general.discussion/ZaFY95aDZoY http://ww ...

  5. ubuntu server静态IP和DNS服务器设置

    Ubuntu的网络参数保存在文件 /etc/network/interfaces中, 默认设置使用dhcp,动态IP获取.   设置静态ip的方法如下: 1) 编辑 /etc/network/inte ...

  6. OSX 下 sftp 上传目录到服务器

    使用如下命令: put –r dir mput –r dir

  7. [Selenium]怎样验证页面是否有无变化

    验证方法:将两次的Dom结构进行对比 String beforeStr = (String) SeleniumUtil.getInnerHTML(page.getDriver(), page.getD ...

  8. ie高版本浏览器不支持velocity的问题解决

    <head><meta http-equiv="X-UA-Compatible" content="IE=5"></head> ...

  9. jquery,禁止冒泡和默认行为

    如果在页面中重叠了多个元素,并且重叠的这些元素都绑定了同一个事件,那么就会出现冒泡问题.//HTML 页面<div style="width:200px;height:200px;ba ...

  10. Vertex-Based Diffusion for 3-D Mesh Denoising(三维网格去噪中基于顶点的扩散算法)

    Abstract—We present a vertex-based diffusion for 3-D mesh denoising by solving a nonlinear discrete ...