LOJ#6360. 复燃「恋之埋火」(最小圆覆盖+高斯消元)
题面
题解
不难发现最小圆覆盖的随机增量法复杂度还是正确的
所以现在唯一的问题就是给定若干个点如何求一个\(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. 复燃「恋之埋火」(最小圆覆盖+高斯消元)的更多相关文章
- LG2447/BZOJ1923 「SDOI2010」外星千足虫 高斯消元
问题描述 LG2447 BZOJ1923 题解 显然是一个高斯消元,但是求的东西比较奇怪 发现这个方程组只关心奇偶性,于是可以用一个\(\mathrm{bitset}\)进行优化,用xor来进行消元操 ...
- LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元
问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_ ...
- 洛谷P4457/loj#2513 [BJOI2018]治疗之雨(高斯消元+概率期望)
题面 传送门(loj) 传送门(洛谷) 题解 模拟赛的时候只想出了高斯消元然后死活不知道怎么继续--结果正解居然就是高斯消元卡常? 首先有个比较难受的地方是它一个回合可能不止扣一滴血--我们得算出\( ...
- LOJ 2542 「PKUWC2018」随机游走 ——树上高斯消元(期望DP)+最值反演+fmt
题目:https://loj.ac/problem/2542 可以最值反演.注意 min 不是独立地算从根走到每个点的最小值,在点集里取 min ,而是整体来看,“从根开始走到点集中的任意一个点就停下 ...
- BZOJ3601. 一个人的数论(狄利克雷卷积+高斯消元)及关于「前 $n$ 个正整数的 $k$ 次幂之和是关于 $n$ 的 $k+1$ 次多项式」的证明
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3601 题解 首先还是基本的推式子: \[\begin{aligned}f_d(n) &a ...
- loj2542 「PKUWC2018」随机游走 MinMax 容斥+树上高斯消元+状压 DP
题目传送门 https://loj.ac/problem/2542 题解 肯定一眼 MinMax 容斥吧. 然后问题就转化为,给定一个集合 \(S\),问期望情况下多少步可以走到 \(S\) 中的点. ...
- 「ZOJ 1354」Extended Lights Out「高斯消元」
题意:给定一个\(5\times 6\)的棋盘的\(01\)状态,每次操作可以使它自己和周围四个格子状态取反,求如何操作,输出一个\(01\)矩阵 题解:这题可以通过枚举第一行的状态然后剩下递推来做, ...
- 「BZOJ 3270」博物馆「高斯消元」
应该算高斯消元经典题了吧. 题意:一个无向连通图,有两个人分别在\(s,t\),若一个人在\(u\),每一分钟有\(p[u]\)的概率不动,否则随机前往一个相邻的结点,求在每个点相遇的概率 题解: 首 ...
- LG3389 「模板」高斯消元法 高斯消元
问题描述 LG3389 题解 高斯消元,是用来解\(n\)元一次方程组的算法,时间复杂度\(O(n^3)\) 这样就构造出了这个方程组的矩阵 目标就是把这个矩阵左边\(n \times n\)消为单位 ...
随机推荐
- Git----时光穿梭机01
看这篇文章之前可以先阅读 https://www.cnblogs.com/cxq0017/p/9645944.html 创建版本库这篇文章 我们已经成功地添加并提交了一个readme.txt文件,现 ...
- 一个简单的MVVM雏形
这是@尚春实现的MVVM,使用定时器轮询,只支持{{}}与input.value的修改. 这只能算是一个玩具,真正的MVVM需要有更复杂的扫描机制,JS解析器,双向绑定链什么的. <!DOCTY ...
- Type Object——类型对象
clr会为应用程序使用的每个类型创建一个内部数据结构,这种数据结构称为类型对象. 具有泛型类型参数的类型称为开放类型(open type),CLR禁止构造开放类型的任何实例. 代码引用一个泛型类型时, ...
- OPENSSL 生成https 客户端证书
下面说下拿服务器证书.(前提是服务器是https,客户端认证用的时候),服务端不给的时候,我们自己去拿(不给怼他!,哈哈,开个玩笑,都会给的) openssl s_client -connect 域名 ...
- Unknown type name 'NSString'
今天看到个问题,编辑工程提示Unknown type name 'NSString',如下图 导致出现异常的原因是是因为工程中添加了ZipArchive(第三方开源解压缩库) 一般情况下出现“Unkn ...
- PhpStorm (强大的PHP开发环境)2017.3.2 附注册方法
最新版PhpStorm 2017正式版改进了PHP 7支持,改进代码完成功能. PhpStorm 是最好的PHP开发工具,使用它进行PHP开发将会让你感觉到编程的乐趣. 快乐无极终于从oschina看 ...
- SQLServer锁的机制
SQLServer锁的机制:共享锁(S)排它锁(X)更新锁(U)意向共享 (IS)意向排它 (IX) 意向排它共享 (SIX)架构修改(Sch-M) 架构稳定性(Sch-S)大容量更新(BU)
- ResourceUtils读取properties文件
注意: properties文件要放在classPath下面,也就是与src下. path.properties(在properties文件中\代表着没有完,下行同本行是一个内容) perfectMa ...
- 打开Android Studio时报Unable to access Android SDK add-on list
第一次安装Android studio时候弹出unable to access android sdk add-on list原因是你电脑没有SDK而且你下载的android studio又是不带SD ...
- dns记录类型(转)
NS:(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终 ...