转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents
by---cxlove
题目:给出球上4个点,求球心坐标
http://acm.hfut.edu.cn/OnlineJudge/
赤果果的是模拟退火啊。。。
当时完全不知道,果断YY了一下之后只能放弃。
对于每一个点,我们计算一下与目标圆心的误差。方差???
随机一点,然后设定一个初始步长,每一次随机30个方向走出去,如果比当前位置更优,则更新
直到步长达到要求的精度。
这题给的时限有3s,范围是1000,貌似精度要求还是很高的,每次step减小0.05倍都不能过。
最终1s+过了,效率不高。
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<vector>
#include<sstream>
#include<ctime>
#include<cassert>
#define LL long long
#define eps 1e-8
#define inf 999999.0
#define zero(a) fabs(a)<eps
#define N 20
#define pi acos(-1.0)
using namespace std;
struct Point{
double x,y,z;
bool check(){
if(fabs(x)<500+eps&&fabs(z)<500+eps&&fabs(y)<500+eps)
return true;
return false;
}
}p[4],cur,central;
double dist(Point p1,Point p2){
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)+(p1.z-p2.z)*(p1.z-p2.z));
}
//当前状态与目标态的误差
double Get_Diff(Point cen){
double diff=0,sum=0,dis[4];
for(int i=0;i<4;i++){
dis[i]=dist(cen,p[i]);
sum+=dis[i];
}
sum/=4;
for(int i=0;i<4;i++)
diff+=(dis[i]-sum)*(dis[i]-sum);
return diff;
}
int main(){
int t,cas=0;
scanf("%d",&t);
while(t--){
for(int i=0;i<4;i++)
scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z);
central.x=central.y=central.z=0;
//步长初始1000,初始位置0,0,0
double step=1000,best=Get_Diff(central);
while(step>0.001){
for(int i=0;i<30;i++){
//随机一个方向
double a=(rand()%30000+1)/30000.0*pi*2;
double b=(rand()%30000+1)/30000.0*pi*2;
cur.x=central.x+step*sin(a)*cos(b);
cur.y=central.y+step*sin(a)*sin(b);
cur.z=central.z+step*cos(a);
if(!cur.check()) continue;
double tmp=Get_Diff(cur);
if(tmp+eps<best){
best=tmp;
central=cur;
}
}
step*=0.95;
}
printf("Case #%d: %.1f %.1f %.1f\n",++cas,central.x,central.y,central.z);
}
return 0;
}
分享到:
相关推荐
该课程设计使用C#语言, VS2012环境开发,主要参照《数据库系统概论》( 高等教育出版社 第4版) 王珊、萨师煊主编,这是一门经典教材。萨老师是数据库的鼻祖,有幸学到开山之人的经典著作,学习真是一种享受。...
1.Uva_base的编译 在编译球队时,则需要在当前球队文件夹下打开终端输入执行以下命令(以下命令都是在root下执行的): ./configure make clean make ...如果运行Uva_base后,出现球员越界或掉线的情况,就重新...
hfut_api_service 开发/使用文档基于koa的hfut教务api服务。...JavaScript 实现框架: 参考项目: 项目结构参考这个 项目结构参考这个...依赖的第三方npm包我就不加蓝链了,都是github上搜出来第一个koa基本框架 koa-ro
"hfut通信系统综合设计"项目,结合了LabVIEW这一强大的图形化编程工具,为学习者提供了实践正弦波收发和广播接收机操作的平台。在这个项目中,我们可以深入探讨几个关键的通信系统知识点。 首先,LabVIEW...
《PyPI官网下载:hfut-2.1.1.tar.gz——深入了解Python库的获取与安装》 在Python的世界里,PyPI(Python Package Index)是最重要的资源库,它为全球的开发者提供了一个集中地,可以发布、分享并下载Python模块。...
该试卷是HFUT的历年的计网试卷,低调
第三个知识点:**输出希腊字母** 在Java中,可以通过字符常量输出希腊字母。希腊字母在Unicode编码中有一系列对应的值,可以从'α'(Unicode值03B1)到'ω'(Unicode值03C9)。使用for循环或者增强for循环,遍历这个...
hfut java第二次作业设计一个包含5个类的Java程序,名为Person的父类有两个子类,学生类Student和员工类Employee。Employee类有两个子类,教师类Faculty和 职员类Staff。所有人都有编号ID、姓名、地址、电话号码和...
hfut-java-实验二 货物进销管理系统
合肥工业大学合肥校区(HFUT)计算机科学与技术专业(CS)。本仓库存有大一至大三的实验+课设及其源_HFUT-CS
标题“HFUT JAVA 5_hfutjava5_”表明这是一个关于Java编程的学习资源,可能源自合肥工业大学(HFUT)的课程或项目,侧重于Java技术的第五个部分。描述中提到的两个主要知识点是: 1. **通过URL从服务器上读取文本...
hfut自然语言处理-test3-中文分词技术应用
hfut操作系统22级分布式课程作业 本资源为hfut(合肥工业大学)22级分布式课程的最后一次作业,涵盖了Hadoop、Spark、RDD、Spark SQL、Spark Streaming等分布式系统相关知识点,旨在供参考和免费下载。 一、Hadoop...
针对HFUTer单片机课程,使用GL9平台实验实现的P2口流水灯汇编代码
hfut自然语言处理-test2-词汇知识库使用技术
hfut-java-实验一 Java开发环境的安装与配置
HFUT(合肥工业大学)在集电领域提供嵌入式实验课程,旨在让学生掌握嵌入式系统设计的基本原理和实践技能。通过这个2021年的实验课程,学生可以深入理解并实际操作嵌入式系统的各个关键环节。 实验本身可能涵盖以下...
hfut自然语言处理-test1-语料库的收集与整理
针对HFUTer单片机课程,使用GL9平台实验实现的中断实现独立按键计数和显示实验的汇编代码
针对HFUTer单片机课程,使用GL9实验平台实现继电器控制的汇编代码实现