假·CF44D题解
这一题题目算长的吧,翻译没有简要题意(吐槽,不过确实和某csp题面一样是真的长,不得不说思维还是有一点巧妙的,需要画图理解
因为题目规定任意三个行星不共线,所以在第一轮中并不会发生碰撞
但由于三角形两边之和大于第三边,所以在第二轮中肯定会发生相撞
直接O(n^2) 暴力枚举三角形另外两个点,找三角形周长最小值并除2
代码附在下面
#include<bits/stdc++.h>
using namespace std;
double mn;
int n;
struct node{int x,y,z;}a[5010];
double dis(node a,node b) {return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));}
int main()
{
cin>>n;
mn=100000000;
for(int i=1;i<=n;i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
for(int i=2;i<=n;i++)
for(int j=i+1;j<=n;j++)
mn=min(mn,(dis(a[i],a[j])+dis(a[1],a[i])+dis(a[1],a[j]))/2);
printf("%.10lf",mn);
}

浙公网安备 33010602011771号