假·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);
}

posted @ 2025-05-03 08:38  zhjzhmh  阅读(28)  评论(0)    收藏  举报