我是靠谱客的博主 秀丽小鸭子,最近开发中收集的这篇文章主要介绍202009-4 星际旅行【CCF-CSP认证真题】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

注意:

(1)能一遍算完存下来的就要及时存储,节约时间。

(2)尽可能简化判断条件。

满分代码

#include<bits/stdc++.h>
using namespace std;
int n,m;
double r;
struct point
{
double d[110];
}p[2010];
double ans[2010];
point o;
double x[2010],diso[2010];
bool intersect(int x,int y,double c)
{
double b=diso[x],a=diso[y];
double p=(a+b+c)/2;
double s=sqrt(p*(p-a)*(p-b)*(p-c));
double h=2*s/c;
if(h<r)
{
if((b*b+c*c-a*a)>0&&(a*a+c*c-b*b)>0)
return 1;
}
return 0;
}
int main()
{
cin>>n>>m>>r;
for(int i=1;i<=n;i++) cin>>o.d[i];
for(int i=1;i<=m;i++)
{
double s=0;
for(int j=1;j<=n;j++)
{
cin>>p[i].d[j];
p[i].d[j]-=o.d[j];
s+=p[i].d[j]*p[i].d[j];
}
diso[i]=sqrt(s);
x[i]=sqrt(s-r*r);
}
for(int i=1;i<=m;i++)
{
for(int j=i+1;j<=m;j++)
{
double c=0,ang;
double d;
for(int k=1;k<=n;k++) c+=(p[i].d[k]-p[j].d[k])*(p[i].d[k]-p[j].d[k]);
c=sqrt(c);
if(intersect(i,j,c))
{
double angj=acos(r/diso[j]),angi=acos(r/diso[i]);
ang=acos((diso[i]*diso[i]+diso[j]*diso[j]-c*c)/(2*diso[i]*diso[j]));
double anga=ang-angj-angi;
d=x[i]+x[j]+anga*r;
}
else d=c;
//printf("%d %d %.16fn",i,j,d);
ans[i]+=d,ans[j]+=d;
}
}
for(int i=1;i<=m;i++)
printf("%.15lfn",ans[i]);
return 0;
}

最后

以上就是秀丽小鸭子为你收集整理的202009-4 星际旅行【CCF-CSP认证真题】的全部内容,希望文章能够帮你解决202009-4 星际旅行【CCF-CSP认证真题】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部