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\)消为单位 ...
随机推荐
- 3 MySQL数据库--初识sql语句
1.初识sql语句 服务端软件 mysqld SQL语句:后面的分号mysql -uroot -p123 操作文件夹(库) 增 create database db1 charset utf8; 查 ...
- epoll用法【整理】
l epoll是什么? epoll是当前在Linux下开发大规模并发网络程序的热门人选,epoll 在Linux2.6内核中正式引入,和select相似,都是I/O多路复用(IO multiplex ...
- Shadow Mapping 的原理与实践 【转】
早在上世纪七十年代末,Williams在他的“Casting Curved Shadows on Curved Surface”一文中提出了名为Shadow Map的阴影生成技术.之后,他人在此基础上 ...
- WeakHashMap, NOT A CACHE
Overview Base Map的实现 基于WeakReference的Entity实现 基于Reference和ReferenceQueue实现 它的弱引用是键,而不是值 它的key会被全自动回收 ...
- x64位windows 2003 server中“Server 对象 错误 'ASP 0177 : 800700c1' Server.CreateObject 失败”问题
给朋友看一个老asp网站图片不能上传问题,试过网上各种办法都提示: Server 对象 错误 'ASP 0177 : 800700c1' Server.CreateObject 失败 最终问题出在x6 ...
- Inception
http://baijiahao.baidu.com/s?id=1601882944953788623&wfr=spider&for=pc
- 深入剖析java的try…catch…finally语句
一.前言 前些天参加面试的时候有一道题: public class test { public static void main(String[] args){ try { return; } fin ...
- java 主类的main方法调用其他方法
方法1:A a=new test().new A(); 内部类对象通过外部类的实例对象调用其内部类构造方法产生,如下: public class test{ class A{ void fA(){ S ...
- Python爬虫进阶三之Scrapy框架安装配置
初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 ...
- [Training Video - 4] [Groovy] String Functions
def x="I like to read books before bed" def temp = x.split(" ") log.info "S ...