[洛谷P4035][JSOI2008]球形空间产生器
题目大意:给你$n$个点坐标,要你求出圆心
题解:随机化,可以随机一个点当圆心,然后和每个点比较,求出平均距离$r$,如果到这个点的距离大于$r$,说明离这个点远了,就给圆心施加一个向这个点的力;若小于$r$,说明近了,就施加一个远离这个点的力。所有点比较完后,把假设的圆心按合力方向移动一个距离,距离和当前温度有关。时间越久,温度越低
卡点:第$8$个点精度总是不够,拼命调参,调好后第$3$个点就$Tle$了,最后卡时过的
C++ Code:
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define maxn 12
int n;
struct Point {
double x[maxn], w;
inline friend Point operator + (const Point &lhs, const Point &rhs) {
Point res;
for (register int i = 0; i < n; i++) res.x[i] = lhs.x[i] + rhs.x[i];
return res;
}
inline friend Point operator - (const Point &lhs, const Point &rhs) {
Point res;
for (register int i = 0; i < n; i++) res.x[i] = lhs.x[i] - rhs.x[i];
return res;
}
inline void operator /= (const int &rhs) {
for (register int i = 0; i < n; i++) x[i] /= rhs;
}
} s[maxn], ans; inline double sqr(double x) {return x * x;}
inline double abs(const Point &O) {
double res = 0;
for (int i = 0; i < n; i++) res += sqr(O.x[i]);
return sqrt(res);
}
inline double dis(Point O) {
double res = 0;
for (int i = 0; i <= n; i++) res += abs(O - s[i]);
return res;
} const double ST = 5000, delT = 0.99995, eps = 1e-5;
const int Tim = 1, __Tim = 250000;
double V[maxn];
void SA() {
double T = ST;
while (T > eps) {
double sum = dis(ans) / (n + 1);
for (int i = 0; i < n; i++) {
V[i] = 0;
for (int j = 0; j <= n; j++) {
V[i] += (abs(ans - s[j]) - sum) * (s[j].x[i] - ans.x[i]);
}
V[i] /= n + 1;
}
for (int i = 0; i < n; i++) {
ans.x[i] += T * V[i];
}
T *= delT;
}
for (int Tim = 0; Tim < __Tim && 1. * clock() / CLOCKS_PER_SEC < .9; Tim++) {
double sum = dis(ans) / (n + 1);
for (int i = 0; i < n; i++) {
V[i] = 0;
for (int j = 0; j <= n; j++) {
V[i] += (abs(ans - s[j]) - sum) * (s[j].x[i] - ans.x[i]);
}
V[i] /= n + 1;
}
for (int i = 0; i < n; i++) {
ans.x[i] += T * V[i];
}
}
} int main() {
scanf("%d", &n);
for (int i = 0; i <= n; i++) {
for (int j = 0; j < n; j++) scanf("%lf", s[i].x + j);
ans = ans + s[i];
}
ans /= n + 1;
for (int i = 0; i < Tim; i++) SA();
for (int i = 0; i < n; i++) {
printf("%.3lf", ans.x[i]);
putchar(i == n - 1 ? '\n' : ' ');
}
return 0;
}
[洛谷P4035][JSOI2008]球形空间产生器的更多相关文章
- 洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)
洛谷题目传送门 球啊球 @xzz_233 qaq 高斯消元模板题,关键在于将已知条件转化为方程组. 可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机. 由 ...
- 洛谷 4035 [JSOI2008]球形空间产生器
题目戳这里 一句话题意 给你 n+1 个 n 维点,需要你求出这个n维球的球心.(n<=10) Solution 这个题目N维的话确实不好想,反正三维就已经把我搞懵了,所以只好拿二维类比. 首先 ...
- 洛谷4035 JSOI2008球形空间产生器 (列柿子+高斯消元)
题目链接 qwq 首先看到这个题,感觉就应该从列方程入手. 我们设给定的点的坐标矩阵是\(x\),然后球心坐标\(a_1,a_2....a_n\) 根据欧几里得距离公式,对于一个\(n维空间\)的第\ ...
- P4035 [JSOI2008]球形空间产生器
题目描述 有一个球形空间产生器能够在 nn 维空间中产生一个坚硬的球体.现在,你被困在了这个 nn 维球体中,你只知道球面上 n+1n+1 个点的坐标,你需要以最快的速度确定这个 nn 维球体的球心坐 ...
- luogu P4035 [JSOI2008]球形空间产生器
[返回模拟退火略解] 题目描述 今有 n+1n+1n+1 个 nnn 维的点,它们都在一个球上.求它们所在球的球心. Solution 4035\text{Solution 4035}Solution ...
- 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个点处理出一个 ...
随机推荐
- ajax跨域请求php
在众多站群中,不同功能的系统使用独立的一个域名,各系统之间存在相互调用的关系.使用js的XMLHttpRequest调用其他域名提示跨域权限不足.有些可能认为都同属于同一个顶级域名或者说域名一模一样怎 ...
- Linux命令应用大词典-第10章 Shell相关命令
10.1 commond:抑制正常的Shell函数查找 10.2 exec:使用执行命令替换当前的shell进程 10.3 bash:GNU的Bourne-Again Shell解释器 10.4 bu ...
- JS变量定义时连续赋值的坑!
在定义变量时,可以将值相同的变量采用连续赋值的方式,如下代码: var a = b = c = ''; 其实这里面有一个很大很大的坑,以代码说明问题: <script language=&quo ...
- 浅谈JS-cookie,你是香甜可口的小点心吗?
引言: 想必大家一定听过或看过浏览器cookie,早在nokia雄霸天下.我们还不太明白浏览器的时候,cookie就已经悄悄地存在于浏览器的“设置选项”中了.当时它的用途仅仅是让你选择是否“清除”.年 ...
- CryptoZombies学习笔记——Lesson4
第四课主要介绍payable函数相关. chapter1: payable修饰函数 以太坊允许同时调用函数和eth转账.msg.value显示发送到合约的以太币数,ether是内置整型数.如果函数没有 ...
- Centos6设置DNS
通过编辑 vi /etc/resolv.conf 设置首选DNS和次要DNS.如下,排在前面的就是首选DNS,后面一行就是次要的DNS服务器DNS vi /etc/resolv.conf namese ...
- 【转】MySQLroot用户忘记密码解决方案(安全模式,修改密码的三种方式)
文章出自:http://www.2cto.com/database/201412/358128.html 1.关闭正在运行的MySQL2.启动MySQL的安全模式,命令如下: ? 1 mysqld - ...
- vue移动音乐app开发学习(一):环境搭建
本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 一:使用vue-cli脚手架搭建: 1: ...
- OJ错误命令解释
①Presentation Error (PE) : 虽然您的程序貌似输出了正确的结果,但是这个结果的格式有点问题. 请检查程序的输出是否多了或者少了空格(' ').制表符('\t')或者换行符('\ ...
- ava中普通代码块,构造代码块,静态代码块区别及示例
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在 ...