답안 #390921

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
390921 2021-04-17T11:47:08 Z SuhaibSawalha1 Sky Walking (IOI19_walk) C++17
10 / 100
4000 ms 755080 KB
#include "walk.h"
#include <bits/stdc++.h>
using namespace std;

int dist (array<int, 2> &a, array<int, 2> &b) {
	return abs(a[0] - b[0]) + abs(a[1] - b[1]);
}

long long min_distance(std::vector<int> x, std::vector<int> h, std::vector<int> l, std::vector<int> r, std::vector<int> y, int src, int snk) {
	vector<array<int, 2>> p;
	int n = x.size(), m = y.size();
	vector<vector<int>> seg(n + m), adj((int)1e6);
	auto add = [&] (int i) {
		int j = p.size();
		for (int k : seg[i]) {
			adj[k].push_back(j);
			adj[j].push_back(k);
		}
		seg[i].push_back(j);
	};
	for (int i = 0; i < n; ++i) {
		add(i);
		p.push_back({x[i], 0});
		add(i);
		p.push_back({x[i], h[i]});
	}
	for (int i = 0; i < m; ++i) {
		add(l[i]);
		add(n + i);
		p.push_back({x[l[i]], y[i]});
		add(r[i]);
		add(n + i);
		p.push_back({x[r[i]], y[i]});
		for (int j = l[i]; j <= r[i]; ++j) {
			if (h[j] >= y[i]) {
				add(j);
				add(n + i);
				p.push_back({x[j], y[i]});
			}
		}
	}
	priority_queue<pair<long long, int>> pq;
	pq.push({0, 2 * src});
	vector<long long> dis(adj.size(), 1e18);
	dis[2 * src] = 0;
	while (pq.size()) {
		long long d = -pq.top().first;
		int u = pq.top().second;
		pq.pop();
		if (d != dis[u]) {
			continue;
		}
		for (int v : adj[u]) {
			int dd = dist(p[u], p[v]);
			if (d + dd < dis[v]) {
				dis[v] = d + dd;
				pq.push({-dis[v], v});
			}
		}
	}
	return dis[2 * snk] == 1e18 ? -1 : dis[2 * snk];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 31564 KB Output is correct
2 Correct 20 ms 31564 KB Output is correct
3 Correct 20 ms 31544 KB Output is correct
4 Correct 20 ms 31564 KB Output is correct
5 Correct 21 ms 31760 KB Output is correct
6 Correct 21 ms 31692 KB Output is correct
7 Correct 20 ms 31724 KB Output is correct
8 Correct 20 ms 31692 KB Output is correct
9 Correct 20 ms 31600 KB Output is correct
10 Correct 21 ms 31840 KB Output is correct
11 Correct 20 ms 31608 KB Output is correct
12 Correct 20 ms 31588 KB Output is correct
13 Correct 20 ms 31616 KB Output is correct
14 Correct 20 ms 31564 KB Output is correct
15 Correct 20 ms 31560 KB Output is correct
16 Correct 20 ms 31564 KB Output is correct
17 Correct 21 ms 31828 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 31564 KB Output is correct
2 Correct 20 ms 31564 KB Output is correct
3 Execution timed out 4083 ms 551416 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 378 ms 72164 KB Output is correct
2 Execution timed out 4118 ms 755080 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 378 ms 72164 KB Output is correct
2 Execution timed out 4118 ms 755080 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 31564 KB Output is correct
2 Correct 20 ms 31564 KB Output is correct
3 Correct 20 ms 31544 KB Output is correct
4 Correct 20 ms 31564 KB Output is correct
5 Correct 21 ms 31760 KB Output is correct
6 Correct 21 ms 31692 KB Output is correct
7 Correct 20 ms 31724 KB Output is correct
8 Correct 20 ms 31692 KB Output is correct
9 Correct 20 ms 31600 KB Output is correct
10 Correct 21 ms 31840 KB Output is correct
11 Correct 20 ms 31608 KB Output is correct
12 Correct 20 ms 31588 KB Output is correct
13 Correct 20 ms 31616 KB Output is correct
14 Correct 20 ms 31564 KB Output is correct
15 Correct 20 ms 31560 KB Output is correct
16 Correct 20 ms 31564 KB Output is correct
17 Correct 21 ms 31828 KB Output is correct
18 Correct 19 ms 31564 KB Output is correct
19 Correct 20 ms 31564 KB Output is correct
20 Execution timed out 4083 ms 551416 KB Time limit exceeded
21 Halted 0 ms 0 KB -