Submission #733611

# Submission time Handle Problem Language Result Execution time Memory
733611 2023-05-01T04:48:52 Z SanguineChameleon Jakarta Skyscrapers (APIO15_skyscraper) C++17
57 / 100
193 ms 118348 KB
#include <bits/stdc++.h>
using namespace std;

void just_do_it();

int main() {
	#ifdef KAMIRULEZ
		freopen("kamirulez.inp", "r", stdin);
		freopen("kamirulez.out", "w", stdout);
	#endif
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	just_do_it();
	return 0;
}

const int maxN = 3e4 + 20;
const int maxC = 2e6 + 20;
const int inf = 1e9 + 20;
int B[maxN];
int P[maxN];
vector<int> adj0[maxN];
vector<int> adj1[maxC];
int dist[maxC];
int pos[maxC];
bool flag[maxN];
int id[maxN];

void just_do_it() {
	fill_n(pos, maxC, -1);
	int N, M;
	cin >> N >> M;
	const int lim = sqrt(N);
	int cnt = N;
	for (int i = 0; i < M; i++) {
		cin >> B[i] >> P[i];
		if (P[i] > lim) {
			int cur = B[i] % P[i];
			int nxt = cur + P[i];
			for (; cur < N; cur += P[i], nxt += P[i]) {
				if (nxt < N) {
					adj1[cnt].emplace_back(cnt + 1);
					adj1[cnt + 1].emplace_back(cnt);
				}
				if (cur == B[i]) {
					adj0[B[i]].emplace_back(cnt);
				}
				pos[cnt] = cur;
				cnt++;
				if (cnt == maxC) {
					exit(0);
				}
			}
		}
	}
	for (int d = 1; d <= lim; d++) {
		for (int i = 0; i < N; i++) {
			flag[i] = false;
		}
		bool found = false;
		for (int i = 0; i < M; i++) {
			if (P[i] == d) {
				found = true;
				break;
			}
		}
		if (!found) {
			continue;
		}
		for (int i = 0; i < d; i++) {
			int cur = i;
			int nxt = cur + d;
			for (; cur < N; cur += d, nxt += d) {
				if (nxt < N) {
					adj1[cnt].emplace_back(cnt + 1);
					adj1[cnt + 1].emplace_back(cnt);
				}
				id[cur] = cnt;
				pos[cnt] = cur;
				cnt++;
				if (cnt == maxC) {
					exit(0);
				}
			}
		}
		for (int i = 0; i < M; i++) {
			if (P[i] == d && !flag[B[i]]) {
				flag[B[i]] = true;
				adj0[B[i]].emplace_back(id[B[i]]);
			}
		}
	}
	assert(cnt < maxC);
	for (int i = 0; i < cnt; i++) {
		dist[i] = inf;
	}
	dist[B[0]] = 0;
	deque<int> q = {B[0]};
	while (!q.empty()) {
		int u = q.front();
		if (u == B[1]) {
			cout << dist[u];
			return;
		}
		q.pop_front();
		if (u < N) {
			for (auto v: adj0[u]) {
				if (dist[u] < dist[v]) {
					dist[v] = dist[u];
					q.push_front(v);
				}
			}
		}
		else if (pos[u] != -1) {
			int v = pos[u];
			if (dist[u] < dist[v]) {
				dist[v] = dist[u];
				q.push_front(v);
			}
		}
		for (auto v: adj1[u]) {
			if (dist[u] + 1 < dist[v]) {
				dist[v] = dist[u] + 1;
				q.push_back(v);
			}
		}
	}
	cout << -1;
}
# Verdict Execution time Memory Grader output
1 Correct 30 ms 55764 KB Output is correct
2 Correct 32 ms 55764 KB Output is correct
3 Correct 30 ms 55728 KB Output is correct
4 Correct 28 ms 55736 KB Output is correct
5 Correct 28 ms 55736 KB Output is correct
6 Correct 26 ms 55764 KB Output is correct
7 Correct 28 ms 55784 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 55808 KB Output is correct
2 Correct 35 ms 55912 KB Output is correct
3 Correct 28 ms 55768 KB Output is correct
4 Correct 28 ms 55764 KB Output is correct
5 Correct 36 ms 55720 KB Output is correct
6 Correct 28 ms 55756 KB Output is correct
7 Correct 29 ms 55844 KB Output is correct
8 Correct 27 ms 55764 KB Output is correct
9 Correct 27 ms 55780 KB Output is correct
10 Correct 29 ms 55904 KB Output is correct
11 Correct 32 ms 56000 KB Output is correct
12 Correct 28 ms 55760 KB Output is correct
13 Correct 29 ms 55788 KB Output is correct
14 Correct 30 ms 55996 KB Output is correct
15 Correct 30 ms 55992 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 28 ms 55840 KB Output is correct
2 Correct 27 ms 55828 KB Output is correct
3 Correct 32 ms 55792 KB Output is correct
4 Correct 28 ms 55836 KB Output is correct
5 Correct 29 ms 55848 KB Output is correct
6 Correct 28 ms 55836 KB Output is correct
7 Correct 30 ms 55768 KB Output is correct
8 Correct 26 ms 55736 KB Output is correct
9 Correct 28 ms 55776 KB Output is correct
10 Correct 28 ms 55800 KB Output is correct
11 Correct 28 ms 55992 KB Output is correct
12 Correct 27 ms 55776 KB Output is correct
13 Correct 32 ms 55764 KB Output is correct
14 Correct 32 ms 56040 KB Output is correct
15 Correct 28 ms 55984 KB Output is correct
16 Correct 29 ms 55908 KB Output is correct
17 Correct 36 ms 56824 KB Output is correct
18 Correct 31 ms 57180 KB Output is correct
19 Correct 32 ms 56552 KB Output is correct
20 Correct 28 ms 55984 KB Output is correct
21 Correct 28 ms 56004 KB Output is correct
22 Correct 30 ms 56596 KB Output is correct
23 Correct 30 ms 56944 KB Output is correct
24 Correct 32 ms 57996 KB Output is correct
25 Correct 29 ms 56148 KB Output is correct
26 Correct 32 ms 57480 KB Output is correct
27 Correct 30 ms 56968 KB Output is correct
28 Correct 36 ms 58344 KB Output is correct
29 Correct 37 ms 58124 KB Output is correct
30 Correct 30 ms 56372 KB Output is correct
31 Correct 30 ms 57044 KB Output is correct
32 Correct 33 ms 56584 KB Output is correct
33 Correct 46 ms 60292 KB Output is correct
34 Correct 41 ms 60236 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 27 ms 55744 KB Output is correct
2 Correct 27 ms 55804 KB Output is correct
3 Correct 27 ms 55784 KB Output is correct
4 Correct 27 ms 55740 KB Output is correct
5 Correct 30 ms 55764 KB Output is correct
6 Correct 29 ms 55764 KB Output is correct
7 Correct 31 ms 55804 KB Output is correct
8 Correct 30 ms 55756 KB Output is correct
9 Correct 26 ms 55764 KB Output is correct
10 Correct 29 ms 55860 KB Output is correct
11 Correct 30 ms 56036 KB Output is correct
12 Correct 35 ms 55860 KB Output is correct
13 Correct 28 ms 55792 KB Output is correct
14 Correct 29 ms 56020 KB Output is correct
15 Correct 29 ms 56048 KB Output is correct
16 Correct 30 ms 56064 KB Output is correct
17 Correct 33 ms 56808 KB Output is correct
18 Correct 32 ms 57164 KB Output is correct
19 Correct 37 ms 56620 KB Output is correct
20 Correct 29 ms 56020 KB Output is correct
21 Correct 27 ms 55888 KB Output is correct
22 Correct 35 ms 56584 KB Output is correct
23 Correct 30 ms 56820 KB Output is correct
24 Correct 32 ms 58032 KB Output is correct
25 Correct 32 ms 56140 KB Output is correct
26 Correct 35 ms 57548 KB Output is correct
27 Correct 34 ms 56988 KB Output is correct
28 Correct 42 ms 58360 KB Output is correct
29 Correct 34 ms 58032 KB Output is correct
30 Correct 32 ms 56472 KB Output is correct
31 Correct 31 ms 57028 KB Output is correct
32 Correct 30 ms 56688 KB Output is correct
33 Correct 42 ms 60372 KB Output is correct
34 Correct 41 ms 60300 KB Output is correct
35 Correct 44 ms 60308 KB Output is correct
36 Correct 34 ms 57276 KB Output is correct
37 Correct 53 ms 63628 KB Output is correct
38 Correct 55 ms 63404 KB Output is correct
39 Correct 56 ms 63256 KB Output is correct
40 Correct 60 ms 63284 KB Output is correct
41 Correct 59 ms 63280 KB Output is correct
42 Correct 35 ms 57804 KB Output is correct
43 Correct 33 ms 57172 KB Output is correct
44 Correct 32 ms 56148 KB Output is correct
45 Correct 133 ms 73548 KB Output is correct
46 Correct 123 ms 73544 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 36 ms 55756 KB Output is correct
2 Correct 34 ms 55772 KB Output is correct
3 Correct 28 ms 55756 KB Output is correct
4 Correct 28 ms 55808 KB Output is correct
5 Correct 30 ms 55764 KB Output is correct
6 Correct 30 ms 55812 KB Output is correct
7 Correct 27 ms 55828 KB Output is correct
8 Correct 29 ms 55768 KB Output is correct
9 Correct 31 ms 55756 KB Output is correct
10 Correct 28 ms 55840 KB Output is correct
11 Correct 28 ms 56044 KB Output is correct
12 Correct 28 ms 55764 KB Output is correct
13 Correct 28 ms 55832 KB Output is correct
14 Correct 31 ms 56024 KB Output is correct
15 Correct 29 ms 56020 KB Output is correct
16 Correct 35 ms 55936 KB Output is correct
17 Correct 33 ms 56832 KB Output is correct
18 Correct 33 ms 57112 KB Output is correct
19 Correct 32 ms 56532 KB Output is correct
20 Correct 29 ms 55892 KB Output is correct
21 Correct 28 ms 55884 KB Output is correct
22 Correct 31 ms 56608 KB Output is correct
23 Correct 34 ms 56908 KB Output is correct
24 Correct 34 ms 57896 KB Output is correct
25 Correct 31 ms 56244 KB Output is correct
26 Correct 33 ms 57500 KB Output is correct
27 Correct 31 ms 57044 KB Output is correct
28 Correct 34 ms 58424 KB Output is correct
29 Correct 36 ms 58068 KB Output is correct
30 Correct 31 ms 56444 KB Output is correct
31 Correct 32 ms 57044 KB Output is correct
32 Correct 37 ms 56652 KB Output is correct
33 Correct 48 ms 60340 KB Output is correct
34 Correct 43 ms 60332 KB Output is correct
35 Correct 45 ms 60420 KB Output is correct
36 Correct 33 ms 57292 KB Output is correct
37 Correct 52 ms 63732 KB Output is correct
38 Correct 51 ms 63264 KB Output is correct
39 Correct 73 ms 63256 KB Output is correct
40 Correct 54 ms 63216 KB Output is correct
41 Correct 53 ms 63232 KB Output is correct
42 Correct 39 ms 57684 KB Output is correct
43 Correct 35 ms 57132 KB Output is correct
44 Correct 32 ms 56148 KB Output is correct
45 Correct 156 ms 73460 KB Output is correct
46 Correct 124 ms 73548 KB Output is correct
47 Correct 182 ms 118348 KB Output is correct
48 Incorrect 193 ms 118148 KB Output isn't correct
49 Halted 0 ms 0 KB -