WaltVBAlston @ 2021-12-01 18:41:41
RT,这个点:
11 345 87
159 212 80
0 -120 95
23 314 30
345 87 53
96 -48 25
0 0 25
261 -48 106
63 84 80
138 -48 17
-25 350 30
71 278 30
output:
44412
我的output:44413
不知道为什么,感觉没问题啊
code:
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<cmath>
#include<iomanip>
using namespace std;
struct node{
int ind;
double spin;
double now;
};
int n;
double xt,yt;
vector <int> e[1105];
double x[1105],y[1105],r[1105];
queue <node> q;
bool vis[1105]={false};
double dis(int i,int j){
return sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));
}
int main(){
cin>>n>>xt>>yt;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i]>>r[i];
if(x[i]==0&&y[i]==0)
q.push((node){i,10000,10000});
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(i==j)
continue;
if(dis(i,j)==r[i]+r[j])
e[i].push_back(j),e[j].push_back(i);
}
while(!q.empty()){
node t=q.front();
q.pop();
if(x[t.ind]==xt&&y[t.ind]==yt){
cout<<fixed<<setprecision(0)<<t.now;
break;
}
for(auto i:e[t.ind]){
int to=i;
double to_spin=t.spin*r[t.ind]/r[to];
if(vis[to])
continue;
vis[to]=true;
q.push((node){to,to_spin,t.now+to_spin});
}
}
return 0;
}