답안 #390973

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
390973 2021-04-17T13:08:45 Z SuhaibSawalha1 Sky Walking (IOI19_walk) C++17
10 / 100
4000 ms 521816 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>> adj;
	vector<int> seg[n + m], S[n], E[n];
	auto add = [&] (int i) {
		adj.push_back({i});
		seg[i].push_back(p.size());
	};
	auto add2 = [&] (int i, int j) {
		adj.push_back({i, j});
		seg[i].push_back(p.size());
		seg[j].push_back(p.size());
	};
	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) {
		add2(l[i], n + i);
		p.push_back({x[l[i]], y[i]});
		add2(r[i], n + i);
		p.push_back({x[r[i]], y[i]});
		S[l[i]].push_back(i);
		E[r[i]].push_back(i);
	}
	set<array<int, 2>> s;
	for (int i = 0; i < n; ++i) {
		for (int v : S[i]) {
			s.insert({y[v], v});
		}
		for (auto &v : s) {
			if (v[0] > h[i]) {
				break;
			}
			add2(i, n + v[1]);
			p.push_back({x[i], v[0]});
		}
		for (int v : E[i]) {
			s.erase({y[v], v});
		}
	}
	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 e : adj[u]) {
			int l = 0, r = seg[e].size() - 1;
			while (l < r) {
				int mid = (l + r) / 2;
				if (seg[e][mid] < u) {
					l = mid + 1;
				}
				else {
					r = mid;
				}
			}
			seg[e].erase(seg[e].begin() + l);
			for (int v : seg[e]) {
				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 1 ms 204 KB Output is correct
2 Correct 1 ms 208 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 332 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Correct 1 ms 332 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 3404 ms 109104 KB Output is correct
4 Correct 980 ms 122692 KB Output is correct
5 Correct 416 ms 94752 KB Output is correct
6 Correct 437 ms 88404 KB Output is correct
7 Correct 418 ms 94780 KB Output is correct
8 Execution timed out 4059 ms 151688 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 191 ms 23384 KB Output is correct
2 Execution timed out 4115 ms 521816 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 191 ms 23384 KB Output is correct
2 Execution timed out 4115 ms 521816 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 208 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 332 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Correct 1 ms 332 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 1 ms 204 KB Output is correct
19 Correct 1 ms 204 KB Output is correct
20 Correct 3404 ms 109104 KB Output is correct
21 Correct 980 ms 122692 KB Output is correct
22 Correct 416 ms 94752 KB Output is correct
23 Correct 437 ms 88404 KB Output is correct
24 Correct 418 ms 94780 KB Output is correct
25 Execution timed out 4059 ms 151688 KB Time limit exceeded
26 Halted 0 ms 0 KB -