各位dalao,请问为什么把代码1改成代码2就过了
代码1:
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
long long t,n,h,r,z[10005],x[10005],y[10005],b[100001000],t1,t2;
bool book[101000];
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n>>h>>r;
int sum=0;
bool flag=0;
for(int j=1;j<=n;j++){
cin>>x[j]>>y[j]>>z[j];
if(z[j]-r<=0){
b[++sum]=j;
if(z[j]+r>=h)
{
flag=1;
}
}
}
if(flag){
// cout<<'*';
cout<<"Yes"<<endl;
continue;
}
//cout<<'x';
if(sum==0){
cout<<"No"<<endl;
continue;
}
memset(book,0,sizeof(book));
t1=0,t2=sum;
flag=1;
long double r1=2*r;
while(t1<=t2){
t1++;
for(int j=1;j<=n;j++){
if(j==b[t1]||book[j])
continue;
if(z[j]>=z[b[t1]])
{
long double d=sqrt(1.0*pow(x[j]-x[b[t1]],2)+1.0*pow(y[j]-y[b[t1]],2)+1.0*pow(z[j]-z[b[t1]],2));
if(d<=r1){
book[j]=1;
b[++t2]=j;
if(z[b[t2]]+r>=h){
cout<<"Yes"<<endl;
flag=0;
break;
}
}
}
}
if(!flag)
break;
}
if(flag)
cout<<"No"<<endl;
}
}
代码2:
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
long long t,n,h,r,z[10005],x[10005],y[10005],b[1000000],t1,t2;
bool book[101000];
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n>>h>>r;
int sum=0;
bool flag=0;
memset(book,0,sizeof(book));
memset(b,0,sizeof(b));
for(int j=1;j<=n;j++){
cin>>x[j]>>y[j]>>z[j];
if(z[j]-r<=0){
b[++sum]=j;
if(z[j]+r>=h)
{
flag=1;
}
}
}
if(flag){
// cout<<'*';
cout<<"Yes"<<endl;
continue;
}
//cout<<'x';
if(sum==0){
cout<<"No"<<endl;
continue;
}
t1=0,t2=sum;
flag=1;
long double r1=2*r;
while(t1<=t2){
t1++;
for(int j=1;j<=n;j++){
if(j==b[t1]||book[j])
continue;
if(z[j]>=z[b[t1]])
{
long double d=sqrt(1.0*pow(x[j]-x[b[t1]],2)+1.0*pow(y[j]-y[b[t1]],2)+1.0*pow(z[j]-z[b[t1]],2));
if(d<=r1){
book[j]=1;
b[++t2]=j;
if(z[b[t2]]+r>=h){
cout<<"Yes"<<endl;
flag=0;
break;
}
}
}
}
if(!flag)
break;
}
if(flag)
cout<<"No"<<endl;
}
}