ans ∗ 1e+4 − ⌊ans ∗ 1e+4⌋ − 0.5| > 1e−2
题意:给出n个点的坐标,要求n个点每两点之间的最大距离。若这n个点,有不连通的地方,则输出Send Kurdy。
<span style="font-size:18px;">#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<climits>
#include<cstring>
#include<string>
#include<set>
#include<map>
#include<queue>
#include<vector>
using namespace std;
const double INF=100000000.0;
const double eps=1e-8;
const int maxn=101+10;
struct Point
{
double x,y;
Point(double x=0.0,double y=0.0):x(x),y(y){}
};
Point point[maxn];
double d[maxn][maxn];
int n;
void Floyd()
{
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
}
int main()
{
int t=1;
int test;
scanf("%d",&test);
while(test--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&point[i].x,&point[i].y);
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(i==j)d[i][j]=0;
else d[i][j]=INF;
}
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
double temp=sqrt((point[i].x-point[j].x)*(point[i].x-point[j].x)+(point[i].y-point[j].y)*(point[i].y-point[j].y));
if(temp<=10.0)d[i][j]=d[j][i]=temp;
}
Floyd();
int flag=1;
double temp=0.0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(INF-d[i][j]<eps){flag=0;break;}
temp=max(temp,d[i][j]);
}
printf("Case #%d:\n",t++);
if(flag==0)printf("Send Kurdy\n\n");
else printf("%.4lf\n\n",temp);
}
return 0;
}</span>