本地运行对了但是提交只过了#1求助
查看原帖
本地运行对了但是提交只过了#1求助
1072842
qimuke楼主2024/8/20 16:33
#include <bits/stdc++.h>
#include<stdio.h>
#include<time.h>
using namespace std;
#define maxn 0x7f7f7f7f
#define inf 500

int m[inf];
double e[inf][inf];
double d,ab,bc,ac;
int n,s,t,a,b,cnt;

struct point{
	int x,y,city;
}p[inf];


int ping(int z){
	return z*z;
}
double dis(point z,point c){
	return sqrt(ping(abs(z.x-c.x))+ping(abs(z.y-c.y)));
}

void init(int cnt){
	ab=ping(abs(p[cnt-1].x-p[cnt-2].x))+ping(abs(p[cnt-1].y-p[cnt-2].y));
	bc=ping(abs(p[cnt-2].x-p[cnt-3].x))+ping(abs(p[cnt-2].y-p[cnt-3].y));
	ac=ping(abs(p[cnt-1].x-p[cnt-3].x))+ping(abs(p[cnt-1].y-p[cnt-3].y));
	if(ab==ac+bc){p[cnt].x=p[cnt-1].x+p[cnt-2].x-p[cnt-3].x;p[cnt].y=p[cnt-1].y+p[cnt-2].y-p[cnt-3].y;}
	if(bc==ac+ab){p[cnt].x=p[cnt-2].x+p[cnt-3].x-p[cnt-1].x;p[cnt].y=p[cnt-2].y+p[cnt-3].y-p[cnt-1].y;}
	if(ac==ab+bc){p[cnt].x=p[cnt-1].x+p[cnt-3].x-p[cnt-2].x;p[cnt].y=p[cnt-1].y+p[cnt-3].y-p[cnt-2].y;}
}



void floyd(){
	for(int k=1;k<=4*s;k++){
		for(int i=1;i<=4*s;i++){
			for(int j=1;j<=4*s;j++){
				e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
			}
		}
	}
}

void clear(){
	for(int i=1;i<=inf;i++){
		p[i].city=p[i].x=p[i].y=0;
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s>>t>>a>>b;
		clear();
		for(int j=1;j<=s;j++){
			cin>>p[4*j-3].x>>p[4*j-3].y>>p[4*j-2].x>>p[4*j-2].y>>p[4*j-1].x>>p[4*j-1].y;
			init(4*j);
			p[4*j].city=p[4*j-1].city=p[4*j-2].city=p[4*j-3].city=j;
			cin>>m[j];
		}	
	
		for(int j=1;j<=4*s;j++){
			for(int k=1;k<=4*s;k++){
				if(k==j)e[j][k]=0;
				else if(p[k].city==p[j].city)e[j][k]=dis(p[k],p[j])*m[p[k].city];
				else e[j][k]=dis(p[k],p[j])*t;
			}
		}
		floyd();d=maxn;
		for(int j=a*4;j>(a-1)*4;j--){
			for(int k=b*4;k>(b-1)*4;k--){
				d=min(e[j][k],d);
			}
		}
		printf("%.1lf\n",d);
	}
} 

#2数据

1
3 10 1 3
2 2 2 1 1 2 10
2 12 12 2 22 12 1
22 22 22 32 32 22 10

214.1

本地机结果214.1,洛谷wa

2024/8/20 16:33
加载中...