QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#170301 | #7184. Transport Pluses | ucup-team1338# | WA | 242ms | 4900kb | C++20 | 2.2kb | 2023-09-09 14:58:25 | 2023-09-09 14:58:50 |
Judging History
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 / 101;
return {x, id - x * 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;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 242ms
memory: 4900kb
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)