又有一个输出49.8的求助

P1027 [NOIP2001 提高组] Car 的旅行路线

@[junyu33](/user/231677) 我也是 # 代码 ```cpp #include<cmath> #include<cstdio> #include<iomanip> #include<memory.h> #include<iostream> using namespace std; struct node{ // int x1,y1,x2,y2,x3,y3,x4,y4,v; double x[5],y[5]; int v; }; const int MAXN=105; int n,S,t,a,b; double map[MAXN*4][MAXN*4],dis[MAXN*4]/*,dis1[MAXN*4]*/,ans; bool vis[MAXN*4]; node c[MAXN]; double juli(double x1,double y1,double x2,double y2){ return sqrt(pow(x1-x2,2)+pow(y1-y2,2)); } double dijkstra(int s,int e){ memset(vis,0,sizeof(vis)); memset(dis,0x7f,sizeof(dis)); for(int i=1;i<=S*4;i++){ dis[i]=map[s][i]; } vis[s]=true; dis[s]=0; for(int i=1;i<=S*4;i++){ int mind=1e9; int minj=0; for(int j=1;j<=S*4;j++){ if(!vis[j] && mind>dis[j]){ mind=dis[j]; minj=j; } } vis[minj]=true; for(int j=1;j<=S*4;j++){ dis[j]=min(dis[j],mind+map[minj][j]); } } return min(min(dis[(e-1)*4+1],dis[(e-1)*4+2]),min(dis[(e-1)*4+3],dis[(e-1)*4+4])); } int main(){ // freopen("route.in","r",stdin); // freopen("route.ans","w",stdout); cin>>n; while(n--){ ans=1e9; memset(vis,0,sizeof(vis)); memset(dis,0x7f,sizeof(dis)); memset(map,0x7f,sizeof(map)); cin>>S>>t>>a>>b; for(int i=1;i<=S;i++){ cin>>c[i].x[1]>>c[i].y[1]>>c[i].x[2]>>c[i].y[2]>>c[i].x[3]>>c[i].y[3]>>c[i].v; if(juli(c[i].x[1],c[i].y[1],c[i].x[2],c[i].y[2])<=juli(c[i].x[1],c[i].y[1],c[i].x[3],c[i].y[3])){ if(juli(c[i].x[3],c[i].y[3],c[i].x[2],c[i].y[2])<juli(c[i].x[1],c[i].y[1],c[i].x[3],c[i].y[3])){ c[i].x[4]=c[i].x[3]-(c[i].x[2]-c[i].x[1]); c[i].y[4]=c[i].y[3]-(c[i].y[2]-c[i].y[1]); map[(i-1)*4+3][(i-1)*4+1]=map[(i-1)*4+1][(i-1)*4+3]=juli(c[i].x[1],c[i].y[1],c[i].x[3],c[i].y[3])*double(c[i].v); map[(i-1)*4+4][(i-1)*4+2]=map[(i-1)*4+2][(i-1)*4+4]=juli(c[i].x[2],c[i].y[2],c[i].x[4],c[i].y[4])*double(c[i].v); } else{ c[i].x[4]=c[i].x[3]-(c[i].x[1]-c[i].x[2]); c[i].y[4]=c[i].y[3]-(c[i].y[1]-c[i].y[2]); map[(i-1)*4+3][(i-1)*4+2]=map[(i-1)*4+2][(i-1)*4+3]=juli(c[i].x[2],c[i].y[2],c[i].x[3],c[i].y[3])*double(c[i].v); map[(i-1)*4+4][(i-1)*4+1]=map[(i-1)*4+1][(i-1)*4+4]=juli(c[i].x[1],c[i].y[1],c[i].x[4],c[i].y[4])*double(c[i].v); } } else{ if(juli(c[i].x[3],c[i].y[3],c[i].x[2],c[i].y[2])<juli(c[i].x[1],c[i].y[1],c[i].x[2],c[i].y[2])){ c[i].x[4]=c[i].x[2]-(c[i].x[3]-c[i].x[1]); c[i].y[4]=c[i].y[2]-(c[i].y[3]-c[i].y[1]); map[(i-1)*4+2][(i-1)*4+1]=map[(i-1)*4+1][(i-1)*4+2]=juli(c[i].x[1],c[i].y[1],c[i].x[2],c[i].y[2])*double(c[i].v); map[(i-1)*4+4][(i-1)*4+3]=map[(i-1)*4+3][(i-1)*4+4]=juli(c[i].x[3],c[i].y[3],c[i].x[4],c[i].y[4])*double(c[i].v); } else{ c[i].x[4]=c[i].x[2]-(c[i].x[1]-c[i].x[3]); c[i].y[4]=c[i].y[2]-(c[i].y[1]-c[i].y[3]); map[(i-1)*4+3][(i-1)*4+2]=map[(i-1)*4+2][(i-1)*4+3]=juli(c[i].x[2],c[i].y[2],c[i].x[3],c[i].y[3])*double(c[i].v); map[(i-1)*4+4][(i-1)*4+1]=map[(i-1)*4+1][(i-1)*4+4]=juli(c[i].x[1],c[i].y[1],c[i].x[4],c[i].y[4])*double(c[i].v); } } } for(int i=1;i<=S;i++){ for(int j=i+1;j<=S;j++){ for(int k=1;k<=4;k++){ for(int l=1;l<=4;l++){ map[(j-1)*4+l][(i-1)*4+k]=map[(i-1)*4+k][(j-1)*4+l]=juli(c[i].x[k],c[i].y[k],c[j].x[l],c[j].y[l])*t; } } } } ans=min(ans,min(min(dijkstra((a-1)*4+1,b),dijkstra((a-1)*4+2,b)),min(dijkstra((a-1)*4+3,b),dijkstra((a-1)*4+4,b)))); cout<<fixed<<setprecision(1)<<ans; cout<<'\n'; } return 0; } ```
by zhangyuanxiao @ 2022-08-15 07:54:05


|