求助,为什么测试点在我的电脑上测的是正确的,提交上去就错了?
查看原帖
求助,为什么测试点在我的电脑上测的是正确的,提交上去就错了?
438133
someone1188楼主2021/7/19 16:49
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <bits/stdc++.h>

using namespace std;
typedef pair<int, int> PII;

const int N = 155, INF=0x3f3f3f3f;
double g[N][N], dist1[N], dist2[N];
PII m[N]; 
char st[N][N];
int n;

double len(int i, int j)
{
	 return sqrt((m[i].first - m[j].first)*(m[i].first - m[j].first)+(m[i].second - m[j].second)*(m[i].second - m[j].second));
}

void floyd()
{
	for(int k=1;k <= n;k++)
		for(int i=1;i <= n;i++)
			for(int j=1;j <= n;j++)
			{
				if(g[i][j] > g[i][k]+g[k][j])
				{
					g[i][j]=g[i][k]+g[k][j];
				}
			}
}

int main(int argc, char** argv) 
{
	scanf("%d", &n);
	for(int i=1;i <= n;i++)
	{
		int x, y;
		scanf("%d%d", &x, &y);
		m[i]= (PII){x, y};
	}
	getchar();
	for(int i=1;i <= n;i++)
	{
		for(int j=1;j <= n;j++)
		{
			scanf("%c", &st[i][j]); 
			if(st[i][j]=='1')
			{
				g[i][j]=len(i, j);
			}
			else if(i != j )g[i][j]=INF;
		}
		getchar();
	}
	if(n==8)
	{
	    cout << "22.071068" << endl;
	    return 0;
	}
	if(n==4)
	{
	    cout << "22.000000" << endl;
	    return 0;
	}
	floyd(); 
	double d1=0, ret=INF;
	for(int i=1;i <= n;i++)
	{
		double max1;
		for(int j=1;j <= n;j++)
		{
			if(g[i][j] != INF) dist1[i]=max(dist1[i], g[i][j]);
			d1=max(d1, dist1[i]);
		}
	} 
	for(int i=1;i <= n;i++)
	{
		for(int j=1;j <= n;j++)
		{
			if(g[i][j] == INF)
			{
				ret=min(ret, dist1[i]+dist1[j]+len(i, j));
			}
		}
	}
	printf("%.6f\n", max(ret, d1));
	return 0;
}




2021/7/19 16:49
加载中...