[返回模拟退火略解]

题目描述

今有 n+1n+1n+1 个 nnn 维的点,它们都在一个球上。求它们所在球的球心。

Solution 4035\text{Solution 4035}Solution 4035

最近学 SA,想用这题练练手。发现参数很难调。考场打的话,得分区间 [0,100][0,100][0,100](手动滑稽) 。

设 calc(X)calc(X)calc(X) 表示题目给出的 n+1n+1n+1 个点中,与 XXX 的最大距离和最小距离的差。容易得到, calc(X)=0calc(X)=0calc(X)=0 时,XXX 为球心。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm> #define reg register int n;
struct node{
double a[15];
}as,cc,e[20],o;
double ans=1e18;
double c[15],ss; double calc(node x){
double mac=0,mic=1e17,sum;
for(reg int i=1;i<=n+1;++i){
sum=0.0;
for(reg int j=1;j<=n;++j)
sum+=(x.a[j]-e[i].a[j])*(x.a[j]-e[i].a[j]);
mac=std::max(mac,sum);
mic=std::min(mic,sum);
}
return mac-mic;
}
void SA(){
o=as;
double t=1000.0;
while(t>1e-14){
node no;
for(reg int i=1;i<=n;++i)
no.a[i]=o.a[i]+(double)((rand()*2)-32767)*t;
double nw=calc(no);
double delta=nw-ans;
if(delta<0){
ans=nw;
as=o=no;
}
else if(exp(-delta/t)*32767>rand()) o=no;
t*=0.99997;
}
}
void work(){
for(reg int i=1;i<=n;++i)
as.a[i]=c[i]/(n+1);
for(reg int i=1;i<=3;++i) SA();
}
int main(){
srand(9999997);
scanf("%d",&n);
for(reg int i=1;i<=n+1;++i){
for(reg int j=1;j<=n;++j){
scanf("%lf",&ss);
e[i].a[j]=ss;
c[j]+=ss;
}
}
work();
for(reg int i=1;i<=n;++i)
printf("%.3lf ",as.a[i]);
}

另外,调参要有耐心。

luogu P4035 [JSOI2008]球形空间产生器的更多相关文章

  1. P4035 [JSOI2008]球形空间产生器

    题目描述 有一个球形空间产生器能够在 nn 维空间中产生一个坚硬的球体.现在,你被困在了这个 nn 维球体中,你只知道球面上 n+1n+1 个点的坐标,你需要以最快的速度确定这个 nn 维球体的球心坐 ...

  2. 洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)

    洛谷题目传送门 球啊球 @xzz_233 qaq 高斯消元模板题,关键在于将已知条件转化为方程组. 可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机. 由 ...

  3. [洛谷P4035][JSOI2008]球形空间产生器

    题目大意:给你$n$个点坐标,要你求出圆心 题解:随机化,可以随机一个点当圆心,然后和每个点比较,求出平均距离$r$,如果到这个点的距离大于$r$,说明离这个点远了,就给圆心施加一个向这个点的力:若小 ...

  4. P4035 [JSOI2008]球形空间产生器 (向量,高斯消元)

    题面 有一个 n n n 维球,给定 n + 1 n+1 n+1 个在球面上的点,求球心坐标. n ≤ 10 n\leq 10 n≤10 . 题解 好久以前的题了,昨天首 A . n n n 太小了! ...

  5. 【bzoj1013】[JSOI2008]球形空间产生器sphere

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4530  Solved: 2364[Subm ...

  6. BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Judg ...

  7. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  8. bzoj 1013 [JSOI2008]球形空间产生器sphere(高斯消元)

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3584  Solved: 1863[Subm ...

  9. 线性代数(高斯消元):JSOI2008 球形空间产生器sphere

    JSOI2008 球形空间产生器sphere [题目描述] 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确 ...

随机推荐

  1. Java中各种引用(Reference)解析

    目录 1,引用类型 2, FinalReference 2.1, Finalizer 3, SoftReference 4, WeakReference 5, PhantomReference 6, ...

  2. switch对输入的运算符的判断

    import java.util.*; public class App3 { public static void main(String [] args) { int num1,num2,num; ...

  3. Mongodb关于查询返回指定字段的方法记录

    //通常指定字段由前端传入后台,例如params 前端以逗号分隔 //后端获取字段后操作如下: Query query = new Query(); if (params != null) { Str ...

  4. maven的mirror和repository加载顺序

    一.概述 maven的settings.xml文件里面有proxy.server.repository.mirror的配置,在配置仓库地址的时候容易混淆 proxy是服务器不能直接访问外网时需要设置的 ...

  5. [Leetcode] 第331题 验证二叉树的前序序列化

    一.题目描述 序列化二叉树的一种方法是使用前序遍历.当我们遇到一个非空节点时,我们可以记录下这个节点的值.如果它是一个空节点,我们可以使用一个标记值记录,例如 #. _9_ / \ 3 2 / \ / ...

  6. 转:sqlserver 存储毫秒23:59:59.999变成第二天00:00:00.000

    因为,在SQL SERVER中DATETIME表示的时间为00:00:00到23:59:59.997,它的时间精度为1/300秒,在使用时会舍入到舍入到 .000..003 或 .007 秒三个增量. ...

  7. 基于docker构建测试环境

    目录 0x01介绍 0x02 镜像基本操作 0x03 容器基本操作 0x04 容器的修改与保存 0x05 使用Dockerfile定制镜像 0x01介绍 Docker 是一个开源的应用容器引擎,基于 ...

  8. 彻底关闭Windows10的更新

    Windows10的自动更新太恶心,关闭之后总能死灰复燃,更新偶尔占用大量的CPU内存,非常影响使用.而网上大多数都是关闭服务之类的方法,但是关闭之后没过多久又会重新自动启动,如何彻底摆脱wiondo ...

  9. HNU_中小学数学卷子自动生成程序(个人项目)简要分析

    一.前言 首先,在这里特别感谢我的结对编程伙伴HnuLyx,他在算法上和设计思路上都与我有很大的不同,个人项目互评中,为我的项目提出了很多很好的建议,让我在认清自己不足的同时,了解到很多以前没有注意的 ...

  10. (6)autotools工具的使用

       autotools是专门用来生成Makefile的一系列工具,包括autoscan.aclocal.autoheader.autoconf.automake等.     (1)autotools ...