Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
150688 吴悠 牛的旅行 C++ 通过 100 10 MS 488 KB 1439 2024-06-06 20:34:46

Tests(9/9):


#include<iostream> #include<cmath> #include<iomanip> using namespace std; double a[151][151],x[151],y[151]; string f[151]; double dis(int x1,int y1,int x2,int y2){ return sqrt(pow((x1-x2),2)+pow((y1-y2),2)); } int main(){ int n; double ans=0x3f3f3f3f; cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ a[i][j]=0x3f3f3f3f; } } for(int i=1;i<=n;i++){ cin>>x[i]>>y[i]; } for(int i=1;i<=n;i++){ cin>>f[i]; } for(int i=1;i<=n;i++){ a[i][i]=0; } for(int i=1;i<=n;i++){ for(int j=0;j<n;j++){ if(f[i][j]=='1'){ a[i][j+1]=dis(x[i],y[i],x[j+1],y[j+1]); a[j+1][i]=dis(x[i],y[i],x[j+1],y[j+1]); } } } for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ a[i][j]=min(a[i][j],a[i][k]+a[k][j]); } } } double max_=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(a[i][j]<0x3f3f3f3f){ max_=max(max_,a[i][j]); } } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(a[i][j]>=0x3f3f3f3f && i!=j){ double maxi=0; for(int k=1;k<=n;k++){ if(a[i][k]<0x3f3f3f3f){ maxi=max(maxi,a[i][k]); } } double maxj=0; for(int k=1;k<=n;k++){ if(a[j][k]<0x3f3f3f3f){ maxj=max(maxj,a[j][k]); } } double ij=dis(x[i],y[i],x[j],y[j]); ans=min(ans,maxi+maxj+ij); } } } cout<<setprecision(6)<<fixed<<max(max_,ans)<<endl; return 0; }


测评信息: