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\)消为单位 ...
随机推荐
- pac (PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。)
PAC自动代理文件格式,教你如何写PAC文件 PAC文件格式 PAC文件是纯文本格式的,实际上就是JavaScript文件.Chrome/Chromium的扩展Switchy!的"Auto ...
- maven工程 ,通过maven更新后,jre恢复到1.5的解决方法
在maven setting.xml profiles节点下加入 <profile> <id>jdk-1.8</id> <activation> < ...
- 如何在ArcMap中监听键盘鼠标事件(转)
如何在ArcMap中监听键盘鼠标事件(转) Link: http://www.cnblogs.com/dyllove98/p/3155551.html 昨天有个朋友想要实现一个功能,就是在ArcMap ...
- 2015年传智播客JavaEE 第168期就业班视频教程day45-ERP项目-0107-其他子系统
一套ERP系统中一定会有CRM,不可能说我所有数据都是散着放的,你想用就随便写一个.你出去和人聊,一定得说我这里有什么有什么,然后你就可以和人说你做的是进销存.人家要问CRM或者说财务系统你就说那不是 ...
- redis的订阅和发布
#订阅和发布有什么用呢?# 特点# 1.实现一个一对多的效果,只有一个发布者,多个订阅者# 2.实时的发布消息,广播方发布消息,所有的订阅者都会受到消息,一个人同时只能接受#一个频道 1.先写一个公共 ...
- [leetcode]121. Best Time to Buy and Sell Stock 最佳炒股时机
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- SQLite介绍
优点:轻量级.绿色组件.单一文件.跨平台.查询效率极高.使用事务插入速度极快.支持limit分页. 适合查询速度要求较高,内存占用较少的场合,尤其是嵌入式操作系统,如各种手机操作系统,低并发web(9 ...
- 查看binlog的简单方法!
今天学到一个牛逼的东西,不用打开binlog文件就可以查看binlog里的event事件. 命令为:show binlog events in 'mysql-bin.000001' from 4 li ...
- 静态方法调静态属性用self,$this不可以
- android,gridview
package com.wes.gridview; import java.util.List; import android.content.Context; import android.cont ...