在这里推销一下博客 总结了常见距离计算公式的计算方法
这个题目不过是 欧氏距离 也就是欧几里得距离
还有一些切比雪夫距离 或者 曼哈顿距离 或者二者 之间的转化
一些基本模型的转换 https://www.cnblogs.com/Tyouchie/p/11769313.html
如果 博客里有什么问题 欢迎指出
C++ 代码
#include<bits/stdc++.h>
typedef long long ll;
const ll N=1100;
ll T,n,h,r,x[N],y[N],z[N],father[N],d[N],u[N];
template<typename T>inline void read(T &x)
{
x=0;T f=1,ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
x*=f;
}
inline long long dis(ll i,ll j) {
return (ll)(x[i]-x[j])*(x[i]-x[j])+(ll)(y[i]-y[j])*(y[i]-y[j])+(ll)(z[i]-z[j])*(z[i]-z[j]);
}
ll fa[N + 5];
ll find(ll x) {
return fa[x]==x?x:fa[x]=find(fa[x]);
}
inline void Union(ll x, ll y) {
fa[find(x)]=find(y);
}
signed main() {
read(T);
while(T--) {
read(n);read(h);read(r);
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
memset(z,0,sizeof(z));
memset(u,0,sizeof(u));
memset(d,0,sizeof(d));
for(ll i=1;i<=n;++i) fa[i]=i;
for(ll i=1;i<=n;++i) read(x[i]), read(y[i]), read(z[i]);
for(ll i=1;i<=n;++i)
for(ll j=1;j<i;++j)
if(dis(i,j)<=(ll)4*r*r)
Union(i,j);
bool flag=0;
for(ll i=1;i<=n;++i) {
if(z[i]-r<=0) d[find(i)]=1;
if(z[i]+r>=h) u[find(i)]=1;
}
for(int i=1;i<=n;++i)
{
if(d[i]&&u[i])flag=1;
if(flag)break;
}
puts(flag ? "Yes" : "No");
}
return 0;
}
见证了一个oier的陨落
我没有学过c语言是吗?
神仙%%%%%