Submission #517031

# Submission time Handle Problem Language Result Execution time Memory
517031 2022-01-22T11:57:35 Z Drew_ Jakarta Skyscrapers (APIO15_skyscraper) C++17
22 / 100
15 ms 21740 KB
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define mp make_pair
#define f1 first
#define s2 second

#define fastio ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define debug(x) cerr << "[" << #x << "]: " << x << "\n";

using ll = long long;
using ld = long double;
using ii = pair<int, int>;
using pl = pair<ll, ll>;

constexpr ld PI = 4*atan((ld)1);
constexpr int MAX = 30069;
constexpr int SQ = 175;	
constexpr int inf = 1e9 + 69;

int n, m;
int cost[MAX][SQ];

int b[MAX], p[MAX];
vector<int> adj[MAX];	

int main()
{
	fastio;

	for (int i = 0; i < MAX; ++i)
		for (int j = 0; j < SQ; ++j)
			cost[i][j] = inf;

	cin >> n >> m;
	for (int i = 0; i < m; ++i)
	{
		cin >> b[i] >> p[i];
		adj[b[i]].pb(p[i]);
	}

	const auto valid = [&](int pos) -> bool
	{
		return 0 <= pos && pos < n;
	};

	priority_queue<array<int, 3>, vector<array<int, 3>>, greater<array<int, 3>>> pq;
	
	cost[b[0]][0] = 0;
	if (p[0] < SQ)
		cost[b[0]][p[0]] = 0;

	pq.push({0, b[0], p[0]});

	while (!pq.empty())
	{
		auto [c, pos, mov] = pq.top();
		pq.pop();

		if (cost[pos][mov] < c)
			continue;

		if (mov < SQ)
		{		
			if (cost[pos][0] > cost[pos][mov])
				cost[pos][0] = cost[pos][mov];
			if (valid(pos - mov) && cost[pos - mov][mov] > 1 + c)
				cost[pos - mov][mov] = 1 + c, pq.push({1 + c, pos - mov, mov});
			if (valid(pos + mov) && cost[pos + mov][mov] > 1 + c)
				cost[pos + mov][mov] = 1 + c, pq.push({1 + c, pos + mov, mov});
		}


		for (int x : adj[pos])
		{
			if (x < SQ)
			{
				if (valid(pos - x) && cost[pos - x][x] > 1 + c)
					cost[pos - x][x] = 1 + c, pq.push({1 + c, pos - x, x});
				if (valid(pos + x) && cost[pos + x] > 1 + cost[pos])
					cost[pos + x][x] = 1 + c, pq.push({1 + c, pos + x, x});
			}
			else
			{
				for (int i = pos, ctr = c; i >= 0; i -= x, ++ctr)
				{
					if (cost[i][0] > ctr)
						cost[i][0] = ctr, pq.push({ctr, i, x});
				}
				for (int i = pos, ctr = c; i < n; i += x, ++ctr)
				{
					if (cost[i][0] > ctr)
						cost[i][0] = ctr, pq.push({ctr, i, x});
				}
			}
		}
		adj[pos].clear();
	}

	// for (int i = 0; i < n; ++i)
	// 	cerr << cost[i] << " \n"[i == n-1];

	cout << (cost[b[1]][0] == inf ? -1 : cost[b[1]][0]) << '\n';

	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 11 ms 21580 KB Output is correct
2 Correct 11 ms 21592 KB Output is correct
3 Correct 11 ms 21580 KB Output is correct
4 Correct 10 ms 21580 KB Output is correct
5 Correct 10 ms 21580 KB Output is correct
6 Correct 11 ms 21580 KB Output is correct
7 Correct 12 ms 21508 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 11 ms 21580 KB Output is correct
2 Correct 11 ms 21580 KB Output is correct
3 Correct 11 ms 21548 KB Output is correct
4 Correct 12 ms 21580 KB Output is correct
5 Correct 10 ms 21616 KB Output is correct
6 Correct 10 ms 21580 KB Output is correct
7 Correct 10 ms 21580 KB Output is correct
8 Correct 11 ms 21524 KB Output is correct
9 Correct 11 ms 21592 KB Output is correct
10 Correct 12 ms 21580 KB Output is correct
11 Correct 11 ms 21708 KB Output is correct
12 Correct 11 ms 21580 KB Output is correct
13 Correct 11 ms 21580 KB Output is correct
14 Correct 11 ms 21708 KB Output is correct
15 Correct 12 ms 21708 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 11 ms 21516 KB Output is correct
2 Correct 11 ms 21596 KB Output is correct
3 Correct 10 ms 21572 KB Output is correct
4 Correct 11 ms 21580 KB Output is correct
5 Correct 11 ms 21580 KB Output is correct
6 Correct 11 ms 21528 KB Output is correct
7 Correct 14 ms 21616 KB Output is correct
8 Correct 13 ms 21556 KB Output is correct
9 Correct 12 ms 21580 KB Output is correct
10 Correct 11 ms 21636 KB Output is correct
11 Correct 15 ms 21704 KB Output is correct
12 Correct 11 ms 21580 KB Output is correct
13 Correct 11 ms 21580 KB Output is correct
14 Correct 12 ms 21660 KB Output is correct
15 Correct 13 ms 21708 KB Output is correct
16 Correct 13 ms 21580 KB Output is correct
17 Correct 13 ms 21688 KB Output is correct
18 Correct 11 ms 21580 KB Output is correct
19 Correct 12 ms 21740 KB Output is correct
20 Correct 11 ms 21704 KB Output is correct
21 Correct 11 ms 21580 KB Output is correct
22 Correct 10 ms 21580 KB Output is correct
23 Correct 11 ms 21580 KB Output is correct
24 Correct 12 ms 21568 KB Output is correct
25 Correct 12 ms 21660 KB Output is correct
26 Correct 12 ms 21580 KB Output is correct
27 Correct 11 ms 21624 KB Output is correct
28 Incorrect 11 ms 21608 KB Output isn't correct
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 13 ms 21584 KB Output is correct
2 Correct 10 ms 21580 KB Output is correct
3 Correct 11 ms 21524 KB Output is correct
4 Correct 13 ms 21580 KB Output is correct
5 Correct 11 ms 21580 KB Output is correct
6 Correct 11 ms 21508 KB Output is correct
7 Correct 11 ms 21580 KB Output is correct
8 Correct 11 ms 21572 KB Output is correct
9 Correct 13 ms 21580 KB Output is correct
10 Correct 11 ms 21580 KB Output is correct
11 Correct 11 ms 21580 KB Output is correct
12 Correct 11 ms 21580 KB Output is correct
13 Correct 12 ms 21700 KB Output is correct
14 Correct 13 ms 21708 KB Output is correct
15 Correct 12 ms 21740 KB Output is correct
16 Correct 11 ms 21580 KB Output is correct
17 Correct 12 ms 21708 KB Output is correct
18 Correct 11 ms 21556 KB Output is correct
19 Correct 13 ms 21624 KB Output is correct
20 Correct 12 ms 21692 KB Output is correct
21 Correct 11 ms 21632 KB Output is correct
22 Correct 10 ms 21580 KB Output is correct
23 Correct 12 ms 21580 KB Output is correct
24 Correct 12 ms 21684 KB Output is correct
25 Correct 12 ms 21564 KB Output is correct
26 Correct 12 ms 21684 KB Output is correct
27 Correct 11 ms 21580 KB Output is correct
28 Incorrect 12 ms 21624 KB Output isn't correct
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 10 ms 21580 KB Output is correct
2 Correct 11 ms 21580 KB Output is correct
3 Correct 11 ms 21580 KB Output is correct
4 Correct 10 ms 21588 KB Output is correct
5 Correct 11 ms 21580 KB Output is correct
6 Correct 11 ms 21584 KB Output is correct
7 Correct 10 ms 21512 KB Output is correct
8 Correct 11 ms 21580 KB Output is correct
9 Correct 11 ms 21580 KB Output is correct
10 Correct 11 ms 21580 KB Output is correct
11 Correct 11 ms 21708 KB Output is correct
12 Correct 11 ms 21580 KB Output is correct
13 Correct 11 ms 21708 KB Output is correct
14 Correct 12 ms 21708 KB Output is correct
15 Correct 14 ms 21628 KB Output is correct
16 Correct 11 ms 21580 KB Output is correct
17 Correct 13 ms 21648 KB Output is correct
18 Correct 11 ms 21580 KB Output is correct
19 Correct 11 ms 21580 KB Output is correct
20 Correct 11 ms 21608 KB Output is correct
21 Correct 11 ms 21612 KB Output is correct
22 Correct 10 ms 21580 KB Output is correct
23 Correct 11 ms 21580 KB Output is correct
24 Correct 12 ms 21588 KB Output is correct
25 Correct 12 ms 21580 KB Output is correct
26 Correct 12 ms 21580 KB Output is correct
27 Correct 13 ms 21588 KB Output is correct
28 Incorrect 13 ms 21580 KB Output isn't correct
29 Halted 0 ms 0 KB -