WA on #2 #5 求调
查看原帖
WA on #2 #5 求调
623950
lbhlgzh楼主2024/9/24 11:59

本地运行结果与测试数据一致 附上#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

以及代码(蒟蒻写的不好,勿喷)

#include<bits/stdc++.h>
#define eps 1e-8
using namespace std;
int s;
struct point{
	int x,y;
	point(int a,int b){
		x=a,y=b;
	}
};
double dist(point a,point b){
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
struct C{
	vector<point> city;
};
C c[200];
double xl(point a,point b){
	if(a.x==b.x||a.y==b.y) return 1;
	return 0;
}
void f(C &x){
	point t1=x.city[0],t2=x.city[1],t3=x.city[2];
	if(xl(t1,t2)&&xl(t1,t3)){
		//cout<<t2.x+t3.x-t1.x<<" "<<t2.y+t3.y-t1.y<<endl;
		x.city.push_back(point(t2.x+t3.x-t1.x,t2.y+t3.y-t1.y));
		return;
	}
	if(xl(t2,t1)&&xl(t2,t3)){
		x.city.push_back(point(t1.x+t3.x-t2.x,t1.y+t3.y-t2.y));
		return;
	}
	if(xl(t3,t2)&&xl(t3,t1)){
		x.city.push_back(point(t2.x+t1.x-t3.x,t2.y+t1.y-t3.y));
		return;
	}
}
int n;
double e[410][410];
int t1[105];
void build(int s,int x){
	for(int k=0;k<=s-1;k++){
		for(int i=0;i<=3;i++){
			for(int j=0;j<=3;j++){
				if(i==j) continue;
				e[k*4+i+1][k*4+j+1]=dist(c[k+1].city[i],c[k+1].city[j])*t1[k+1];
				e[k*4+j+1][k*4+i+1]=dist(c[k+1].city[i],c[k+1].city[j])*t1[k+1];		
			}
		}
	}
	for(int k=0;k<=s-1;k++){
		for(int i=0;i<=3;i++){
			for(int j=(k+1)*4+1;j<=s*4;j++){
				int id=j/4,pos=j%4;
				if(j%4!=0) id++;
				if(pos==0) pos=4;
				e[k*4+i+1][j]=dist(c[id].city[pos-1],c[k+1].city[i])*x;
				e[j][k*4+i+1]=dist(c[id].city[pos-1],c[k+1].city[i])*x;
			}
		}
	}
}
void fly(){
	for(int k=1;k<=s*4;k++){
		for(int i=1;i<=s*4;i++){
			for(int j=1;j<=s*4;j++){
				e[j][i]=e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
			}
		}
	}
}
int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	scanf("%d",&n);
	while(n--){
		for(int i=1;i<=400;i++){
			for(int j=1;j<=400;j++){
				if(i==j) e[i][j]=0;
				else e[i][j]=1e8;
			}
		}
		int t,a,b;
		int x,y;
		scanf("%d%d%d%d",&s,&t,&a,&b);
		for(int i=1;i<=s;i++){
			c[i].city.clear();
		}
		for(int i=1;i<=s;i++){
			for(int j=1;j<=3;j++){
				scanf("%d%d",&x,&y);
				c[i].city.push_back(point(x,y));
			}
			f(c[i]);
			scanf("%d",&t1[i]);
		}
		build(s,t);
		fly();
		int start=(a-1)*4,end=(b-1)*4;
		double ans=1e8;
		for(int i=1;i<=4;i++){
			for(int j=1;j<=4;j++){
				ans=min(ans,e[start+i][end+j]);
			}
		}
		printf("%.1lf",ans);
	}
	
	return 0;
}

2024/9/24 11:59
加载中...