luogu P4035 [JSOI2008]球形空间产生器
题目描述
今有 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]球形空间产生器的更多相关文章
- P4035 [JSOI2008]球形空间产生器
题目描述 有一个球形空间产生器能够在 nn 维空间中产生一个坚硬的球体.现在,你被困在了这个 nn 维球体中,你只知道球面上 n+1n+1 个点的坐标,你需要以最快的速度确定这个 nn 维球体的球心坐 ...
- 洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)
洛谷题目传送门 球啊球 @xzz_233 qaq 高斯消元模板题,关键在于将已知条件转化为方程组. 可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机. 由 ...
- [洛谷P4035][JSOI2008]球形空间产生器
题目大意:给你$n$个点坐标,要你求出圆心 题解:随机化,可以随机一个点当圆心,然后和每个点比较,求出平均距离$r$,如果到这个点的距离大于$r$,说明离这个点远了,就给圆心施加一个向这个点的力:若小 ...
- P4035 [JSOI2008]球形空间产生器 (向量,高斯消元)
题面 有一个 n n n 维球,给定 n + 1 n+1 n+1 个在球面上的点,求球心坐标. n ≤ 10 n\leq 10 n≤10 . 题解 好久以前的题了,昨天首 A . n n n 太小了! ...
- 【bzoj1013】[JSOI2008]球形空间产生器sphere
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4530 Solved: 2364[Subm ...
- BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元
1013: [JSOI2008]球形空间产生器sphere Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Judg ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
- bzoj 1013 [JSOI2008]球形空间产生器sphere(高斯消元)
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3584 Solved: 1863[Subm ...
- 线性代数(高斯消元):JSOI2008 球形空间产生器sphere
JSOI2008 球形空间产生器sphere [题目描述] 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确 ...
随机推荐
- tomcat启动抛出异常
2018-5-26 15:55:47 org.apache.catalina.startup.VersionLoggerListener log信息: Server version: Apache T ...
- 《JavaScript设计模式与开发实践》读书笔记-基础知识
笔记内容多摘录自<JavaScript设计模式与开发实践>(曾探著),侵删. 面向对象的JavaScript 1. 动态需要类型和鸭子类型 鸭子类型 如果它走起路来像鸭子,叫起来也是鸭子, ...
- caffe学习二:py-faster-rcnn配置运行faster_rcnn_end2end-VGG_CNN_M_1024 (Ubuntu16.04)
本文的主要目的是学习记录. 原文连接:https://blog.csdn.net/samylee/article/details/51099508 本博客中我将对py-faster-rcnn配置运行f ...
- CabloyJS带你轻松走进NodeJS全栈开发-免费课程 作者亲授
课程说明 B站直播 为回馈新老同学对开源框架CabloyJS的支持与厚爱,快速而轻松的开启NodeJS全栈开发之旅.2019年9月5日至9月11日在B站开启了一波免费直播培训课程 课程信息,请点击链接 ...
- c语言的数据类型,运算符,存储类型
[1词法符号]1. 关键字:32个1) 存储类型:决定(设备)变量的存储位置auto(自动型).extern(外部引用) static(静态型) register(寄存器类型)2) 数据类型:决定设备 ...
- (3)安装elastic6.1.3及插件kibana,x-pack,essql,head,bigdesk,cerebro,ik
6安装nginx 6.1安装nginx 安装 pcre,zlib,openssl,nginx 6.2生成web访问用户密码 htpasswd –c –b /usr/local/nginx/conf/p ...
- supervisor模块学习使用
supervisor组件 supervisord supervisord是supervisor的服务端程序. 启动supervisor程序自身,启动supervisor管理的子进程,响应来自clien ...
- 《深度解析Tomcat》 第一章 一个简单的Web服务器
本章介绍Java Web服务器是如何运行的.从中可以知道Tomcat是如何工作的. 基于Java的Web服务器会使用java.net.Socket类和java.net.ServerSocket类这两个 ...
- 2019年十大开源WEB应用防火墙点评
2019年十大开源WEB应用防火墙点评 随着WEB应用的爆炸式成长和HTTPS加密的普及,针对网络应用层的攻击,像SQL注入.跨站脚本攻击.参数篡改.应用平台漏洞攻击.拒绝服务攻击等越来越多,传统的防 ...
- css实现斜角效果
重点代码: 使用一张图片盖住div,实现斜角效果 .triangle { position: absolute; top:; left:; width: 36px; height: 36px; bac ...