QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#170225#7184. Transport Plusesucup-team1338#WA 331ms5036kbC++202.2kb2023-09-09 14:50:092023-09-09 14:50:11

Judging History

你现在查看的是最新测评结果

  • [2023-09-09 14:50:11]
  • 评测
  • 测评结果:WA
  • 用时:331ms
  • 内存:5036kb
  • [2023-09-09 14:50:09]
  • 提交

answer

#include <bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
typedef unsigned long long ull;
typedef long long ll;

const int N = 101;
int id(int x, int y)
{
	// 0~101*101-1
	return x * N + y;
}
array<int, 2> inv(int id)
{
	int x = (id - 1) / 101;
	return {x, (id - x * 101) % 101};
}
double dis(int i, int j)
{
	array<int, 2> a = inv(i), b = inv(j);
	return sqrt((a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]));
}
vector<array<int, 2>> e[N * N];
double d[N * N];
bool vis[N * N];
array<int, 2> pre[N * N];
void solve()
{
	int n, t;
	cin >> n >> t;
	array<int, 2> bg, ed;
	cin >> bg[0] >> bg[1] >> ed[0] >> ed[1];
	for (int i = 1; i <= n; ++i)
	{
		int x, y;
		cin >> x >> y;
		vector<array<int, 2>> v;
		v.push_back({x, y});
		for (int i = 0; i <= 100; ++i)
			if (i != y)
				v.push_back({x, i});
		for (int i = 0; i <= 100; ++i)
			if (i != x)
				v.push_back({i, y});
		for (int j = 0; j < (int)v.size(); ++j)
			for (int k = j + 1; k < (int)v.size(); ++k)
			{
				const auto &[x1, y1] = v[j];
				const auto &[x2, y2] = v[k];
				e[id(x1, y1)].push_back({id(x2, y2), i});
				e[id(x2, y2)].push_back({id(x1, y1), i});
			}
	}

	for (int i = 0; i < N * N; ++i)
		d[i] = 1e18;
	d[id(bg[0], bg[1])] = 0;
	for (int i = 1; i < N * N; ++i)
	{
		int x = -1, mn = 1e18;
		for (int i = 0; i < N * N; ++i)
			if (!vis[i] && d[i] < mn)
				x = i, mn = d[x];
		vis[x] = true;
		for (int i = 0; i < N * N; ++i)
			if (!vis[i])
				if (d[i] > d[x] + dis(x, i))
					d[i] = d[x] + dis(x, i), pre[i] = {x, 0};

		for (const auto &[a, b] : e[x])
			if (!vis[a])
				if (d[a] > d[x] + t)
					d[a] = d[x] + t, pre[a] = {x, b};
	}

	printf("%.15Lf\n", d[id(ed[0], ed[1])]);
	vector<array<int, 3>> v;
	int pos = id(ed[0], ed[1]);
	while (pos != id(bg[0], bg[1]))
	{
		v.push_back({pre[pos][1], inv(pos)[0], inv(pos)[1]});
		pos = pre[pos][0];
	}
	cout << v.size() << '\n';
	for (int i = (int)v.size() - 1; ~i; --i)
		cout << v[i][0] << ' ' << v[i][1] << ' ' << v[i][2] << '\n';
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	// cout.tie(0);

	// int T;
	// cin >> T;
	// while (T--)
	// 	solve();
	solve();
	return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 331ms
memory: 5036kb

input:

1 2
1 1
5 3
6 2

output:

3
0 1 2
1 5 2
0 5 3
4.000000000000000

result:

wrong answer arrived at (1.000000, 1.000000) instead of (5.000000, 3.000000)