QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#595152 | #7184. Transport Pluses | xuanbac05 | TL | 1ms | 4384kb | C++17 | 4.0kb | 2024-09-28 12:44:15 | 2024-09-28 12:44:15 |
Judging History
answer
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define endl '\n'
#define MASK(i) (1LL << (i))
#define ull unsigned long long
#define ld long double
#define pb push_back
#define all(x) (x).begin() , (x).end()
#define BIT(x , i) ((x >> (i)) & 1)
#define TASK "task"
#define sz(s) (int) (s).size()
using namespace std;
const int mxN = 207;
const int inf = 1e9 + 277;
const int mod = 1e9 + 7;
const ll infll = 1e18 + 7;
const int base = 307;
const int LOG = 20;
template <typename T1, typename T2> bool minimize(T1 &a, T2 b) {
if (a > b) {a = b; return true;} return false;
}
template <typename T1, typename T2> bool maximize(T1 &a, T2 b) {
if (a < b) {a = b; return true;} return false;
}
struct Trace{
int id, x, y;
};
int n, t;
pair<int, int> sta;
pair<int, int> fin;
pair<int, int> a[mxN];
double dist[mxN][mxN];
Trace trace[mxN][mxN];
double getDist(pair<int, int> u, pair<int, int> v) {
return sqrt(1LL * (u.fi - v.fi) * (u.fi - v.fi) + 1LL * (u.se - v.se) * (u.se - v.se));
}
void solve()
{
cin >> n >> t;
cin >> sta.fi >> sta.se >> fin.fi >> fin.se;
for (int i = 1; i <= n; i++) {
cin >> a[i].fi >> a[i].se;
}
for (int i = 0; i <= 100; i++)
for (int j = 0; j <= 100; j++) dist[i][j] = (double) inf;
priority_queue<pair<double, pair<int, int>>, vector<pair<double, pair<int, int>>>, greater<pair<double, pair<int, int>>>> pq;
dist[sta.fi][sta.se] = 0;
pq.push(make_pair(dist[sta.fi][sta.se], make_pair(sta.fi, sta.se)));
while(!pq.empty()) {
double val = pq.top().fi;
pair<int, int> u = pq.top().se;
pq.pop();
if (abs(val - dist[u.fi][u.se]) > 1e-3) continue;
for(int i = 1; i <= n; i++) {
if(minimize(dist[a[i].fi][a[i].se], val + getDist(u, a[i]))) {
trace[a[i].fi][a[i].se] = {0, u.fi, u.se};
pq.push(make_pair(dist[a[i].fi][a[i].se], make_pair(a[i].fi, a[i].se)));
}
if(minimize(dist[a[i].fi][u.se], val + getDist(u, make_pair(a[i].fi, u.se)))) {
trace[a[i].fi][u.se] = {0, a[i].fi, a[i].se};
pq.push(make_pair(dist[a[i].fi][u.se], make_pair(a[i].fi, u.se)));
}
if(minimize(dist[u.fi][a[i].se], val + getDist(u, make_pair(u.fi, a[i].se)))) {
trace[u.fi][a[i].se] = {0, u.fi, u.se};
pq.push(make_pair(dist[u.fi][a[i].se], make_pair(u.fi, a[i].se)));
}
if(u.fi == a[i].fi || u.se == a[i].se) {
for (int x = 0; x <= 100; x++) {
if(minimize(dist[x][a[i].se], val + t)) {
trace[x][a[i].se] = {i, u.fi, u.se};
pq.push(make_pair(dist[x][a[i].se], make_pair(x, a[i].se)));
}
if(minimize(dist[a[i].fi][x], val + t)) {
trace[a[i].fi][x] = {i, u.fi, u.se};
pq.push(make_pair(dist[a[i].fi][x], make_pair(a[i].fi, x)));
}
}
}
}
if(minimize(dist[fin.fi][fin.se], val + getDist(u, fin))) {
trace[fin.fi][fin.se] = {0, u.fi, u.se};
pq.push(make_pair(dist[fin.fi][fin.se], make_pair(fin.fi, fin.se)));
}
}
cout << fixed << setprecision(6) << dist[fin.fi][fin.se] << endl;
int x = fin.fi, y = fin.se;
vector<Trace> path;
while(x != sta.fi || y != sta.se) {
path.pb({trace[x][y].id, x, y});
int xx = trace[x][y].x;
int yy = trace[x][y].y;
x = xx;
y = yy;
}
reverse(all(path));
cout << sz(path) << endl;
for(auto it : path) cout << it.id << ' ' << it.x << ' ' << it.y << endl;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
// freopen(TASK".inp" , "r" , stdin);
// freopen(TASK".out" , "w" , stdout);
int tc = 1;
//cin >> tc;
while(tc--) {
solve();
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 4384kb
input:
1 2 1 1 5 3 6 2
output:
4.000000 3 0 1 2 1 5 2 0 5 3
result:
ok correct
Test #2:
score: 0
Accepted
time: 1ms
memory: 4328kb
input:
2 1 1 1 6 1 1 3 6 3
output:
2.000000 2 1 0 3 2 6 1
result:
ok correct
Test #3:
score: 0
Accepted
time: 0ms
memory: 4048kb
input:
0 0 1 1 1 1
output:
0.000000 0
result:
ok correct
Test #4:
score: 0
Accepted
time: 0ms
memory: 4076kb
input:
0 0 100 100 0 0
output:
141.421356 1 0 0 0
result:
ok correct
Test #5:
score: 0
Accepted
time: 1ms
memory: 4332kb
input:
1 0 100 100 0 0 100 100
output:
100.000000 2 1 0 100 0 0 0
result:
ok correct
Test #6:
score: 0
Accepted
time: 1ms
memory: 4220kb
input:
1 0 100 100 0 0 100 0
output:
0.000000 1 1 0 0
result:
ok correct
Test #7:
score: 0
Accepted
time: 1ms
memory: 4324kb
input:
1 0 100 100 0 0 0 100
output:
0.000000 1 1 0 0
result:
ok correct
Test #8:
score: 0
Accepted
time: 1ms
memory: 4272kb
input:
1 100 50 50 0 0 50 50
output:
70.710678 1 0 0 0
result:
ok correct
Test #9:
score: 0
Accepted
time: 1ms
memory: 4316kb
input:
1 100 50 50 0 0 0 50
output:
70.710678 1 0 0 0
result:
ok correct
Test #10:
score: 0
Accepted
time: 1ms
memory: 4344kb
input:
1 100 50 50 0 0 51 51
output:
70.710678 1 0 0 0
result:
ok correct
Test #11:
score: 0
Accepted
time: 1ms
memory: 4200kb
input:
1 100 50 50 0 0 2 53
output:
70.710678 1 0 0 0
result:
ok correct
Test #12:
score: 0
Accepted
time: 1ms
memory: 4240kb
input:
1 100 0 0 100 100 50 50
output:
141.421356 1 0 100 100
result:
ok correct
Test #13:
score: 0
Accepted
time: 1ms
memory: 4328kb
input:
1 33 0 0 100 100 50 50
output:
133.000000 3 0 0 50 1 50 100 0 100 100
result:
ok correct
Test #14:
score: -100
Time Limit Exceeded
input:
1 12 100 0 11 90 0 100