Submission #249236

# Submission time Handle Problem Language Result Execution time Memory
249236 2020-07-14T14:00:24 Z hunni10 Jakarta Skyscrapers (APIO15_skyscraper) C++14
36 / 100
1000 ms 100784 KB
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<bitset>
#include<math.h>
#include<string.h>
#include<queue>
#include<list>
#include<time.h>
#include<assert.h>
#include<unordered_set>
#define MAX_DIVISOR 512
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, ll> pil;
typedef pair<ll, int> pli;

int n, m;

int b[30000];
int p[30000];
int shortest[30000];
vector<int> building_doge[30000];
vector<vector<int> > div_grid[MAX_DIVISOR+1];
bool visited[30000] = {0, };
bool inSorted[30000] = { 0, };
set<pii> sorted;

int main() {
	scanf("%d %d", &n, &m);
	for (int i = 0; i < m; i++) {
		scanf("%d %d", b + i, p + i);
		
	}
	for (int i = 0; i < m; i++) {
		shortest[i] = 0x7FFFFFFF;
	}
	for (int i = 1; i <= MAX_DIVISOR; i++) {
		div_grid[i].assign(i, {});
	}
	for (int i = 0; i < m; i++) {
		building_doge[b[i]].push_back(i);
		for (int divisor = 1; divisor <= MAX_DIVISOR; divisor++) {
			div_grid[divisor][b[i] % divisor].push_back(i);
		}
	}
	shortest[0] = 0;
	inSorted[0] = true;
	sorted.insert({ 0, 0 });
	while (true) {
		if (sorted.empty()) { printf("-1"); break; }
		pii now = *sorted.begin();
		if (now.second == 1) {
			printf("%d", now.first);
			break;
		}
		visited[now.second] = true;
		if (p[now.second] <= MAX_DIVISOR) {
			for (int v : div_grid[p[now.second]][b[now.second] % p[now.second]]) {
				if (visited[v]) continue;
				int times = (b[v] - b[now.second]) / p[now.second];
				if (times < 0) times = -times;
				times += now.first;
				if (times < shortest[v]) {
					if (inSorted) {
						sorted.erase({ shortest[v], v });
					}
					shortest[v] = times;
					sorted.insert({ shortest[v], v });
					inSorted[v] = true;
				}
			}
		}
		int i = b[now.second] % p[now.second];
		for (; i < n; i+= p[now.second]) {
			for (int v : building_doge[i]) {
				if (visited[v]) continue;
				if ((i - b[now.second]) % p[now.second] == 0) {
					int times = (i - b[now.second]) / p[now.second];
					if (times < 0) times = -times;
					times += now.first;
					if (times < shortest[v]) {
						if (inSorted) {
							sorted.erase({ shortest[v], v });
						}
						shortest[v] = times;
						sorted.insert({ shortest[v], v });
						inSorted[v] = true;
					}
				}
			}
		}
		sorted.erase(sorted.begin());
	}
}

Compilation message

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:35:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:37:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", b + i, p + i);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4224 KB Output is correct
2 Correct 3 ms 4096 KB Output is correct
3 Correct 2 ms 4096 KB Output is correct
4 Correct 3 ms 4224 KB Output is correct
5 Correct 3 ms 4224 KB Output is correct
6 Correct 3 ms 4224 KB Output is correct
7 Correct 3 ms 4224 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4224 KB Output is correct
2 Correct 3 ms 4096 KB Output is correct
3 Correct 2 ms 4096 KB Output is correct
4 Correct 4 ms 4224 KB Output is correct
5 Correct 3 ms 4224 KB Output is correct
6 Correct 3 ms 4224 KB Output is correct
7 Correct 3 ms 4224 KB Output is correct
8 Correct 4 ms 4352 KB Output is correct
9 Correct 4 ms 4608 KB Output is correct
10 Correct 15 ms 6016 KB Output is correct
11 Correct 47 ms 10616 KB Output is correct
12 Correct 26 ms 8448 KB Output is correct
13 Correct 56 ms 9848 KB Output is correct
14 Correct 43 ms 10360 KB Output is correct
15 Correct 43 ms 10360 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4224 KB Output is correct
2 Correct 3 ms 4096 KB Output is correct
3 Correct 3 ms 4096 KB Output is correct
4 Correct 3 ms 4224 KB Output is correct
5 Correct 3 ms 4224 KB Output is correct
6 Correct 4 ms 4224 KB Output is correct
7 Correct 2 ms 4224 KB Output is correct
8 Correct 3 ms 4352 KB Output is correct
9 Correct 4 ms 4608 KB Output is correct
10 Correct 16 ms 6016 KB Output is correct
11 Correct 48 ms 10616 KB Output is correct
12 Correct 27 ms 8448 KB Output is correct
13 Correct 55 ms 9848 KB Output is correct
14 Correct 44 ms 10360 KB Output is correct
15 Correct 43 ms 10360 KB Output is correct
16 Correct 29 ms 7800 KB Output is correct
17 Correct 83 ms 11768 KB Output is correct
18 Correct 60 ms 9208 KB Output is correct
19 Correct 29 ms 7800 KB Output is correct
20 Correct 136 ms 12536 KB Output is correct
21 Correct 44 ms 9464 KB Output is correct
22 Correct 36 ms 8312 KB Output is correct
23 Correct 50 ms 9208 KB Output is correct
24 Correct 94 ms 12152 KB Output is correct
25 Correct 105 ms 12536 KB Output is correct
26 Correct 32 ms 9344 KB Output is correct
27 Correct 30 ms 9216 KB Output is correct
28 Correct 106 ms 12420 KB Output is correct
29 Correct 19 ms 6400 KB Output is correct
30 Correct 7 ms 4864 KB Output is correct
31 Correct 16 ms 5888 KB Output is correct
32 Correct 16 ms 6016 KB Output is correct
33 Correct 46 ms 10232 KB Output is correct
34 Correct 46 ms 10232 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4224 KB Output is correct
2 Correct 3 ms 4096 KB Output is correct
3 Correct 3 ms 4096 KB Output is correct
4 Correct 3 ms 4224 KB Output is correct
5 Correct 3 ms 4224 KB Output is correct
6 Correct 3 ms 4224 KB Output is correct
7 Correct 3 ms 4224 KB Output is correct
8 Correct 3 ms 4352 KB Output is correct
9 Correct 5 ms 4608 KB Output is correct
10 Correct 15 ms 6016 KB Output is correct
11 Correct 48 ms 10616 KB Output is correct
12 Correct 27 ms 8448 KB Output is correct
13 Correct 55 ms 9848 KB Output is correct
14 Correct 45 ms 10360 KB Output is correct
15 Correct 44 ms 10360 KB Output is correct
16 Correct 29 ms 7800 KB Output is correct
17 Correct 84 ms 11768 KB Output is correct
18 Correct 50 ms 9208 KB Output is correct
19 Correct 29 ms 7808 KB Output is correct
20 Correct 137 ms 12536 KB Output is correct
21 Correct 47 ms 9536 KB Output is correct
22 Correct 37 ms 8320 KB Output is correct
23 Correct 49 ms 9208 KB Output is correct
24 Correct 96 ms 12152 KB Output is correct
25 Correct 114 ms 12536 KB Output is correct
26 Correct 31 ms 9336 KB Output is correct
27 Correct 30 ms 9208 KB Output is correct
28 Correct 102 ms 12408 KB Output is correct
29 Correct 18 ms 6400 KB Output is correct
30 Correct 7 ms 4864 KB Output is correct
31 Correct 16 ms 5888 KB Output is correct
32 Correct 16 ms 6016 KB Output is correct
33 Correct 44 ms 10232 KB Output is correct
34 Correct 46 ms 10232 KB Output is correct
35 Correct 976 ms 87160 KB Output is correct
36 Correct 211 ms 20936 KB Output is correct
37 Correct 780 ms 66724 KB Output is correct
38 Execution timed out 1093 ms 97912 KB Time limit exceeded
39 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4224 KB Output is correct
2 Correct 3 ms 4096 KB Output is correct
3 Correct 3 ms 4096 KB Output is correct
4 Correct 2 ms 4224 KB Output is correct
5 Correct 3 ms 4224 KB Output is correct
6 Correct 3 ms 4224 KB Output is correct
7 Correct 3 ms 4224 KB Output is correct
8 Correct 3 ms 4352 KB Output is correct
9 Correct 5 ms 4608 KB Output is correct
10 Correct 16 ms 6016 KB Output is correct
11 Correct 47 ms 10616 KB Output is correct
12 Correct 29 ms 8448 KB Output is correct
13 Correct 61 ms 9860 KB Output is correct
14 Correct 44 ms 10360 KB Output is correct
15 Correct 48 ms 10360 KB Output is correct
16 Correct 32 ms 7800 KB Output is correct
17 Correct 113 ms 11768 KB Output is correct
18 Correct 65 ms 9208 KB Output is correct
19 Correct 38 ms 7828 KB Output is correct
20 Correct 166 ms 12536 KB Output is correct
21 Correct 57 ms 9464 KB Output is correct
22 Correct 36 ms 8312 KB Output is correct
23 Correct 50 ms 9208 KB Output is correct
24 Correct 109 ms 12328 KB Output is correct
25 Correct 100 ms 12536 KB Output is correct
26 Correct 31 ms 9344 KB Output is correct
27 Correct 29 ms 9216 KB Output is correct
28 Correct 99 ms 12432 KB Output is correct
29 Correct 18 ms 6400 KB Output is correct
30 Correct 8 ms 4992 KB Output is correct
31 Correct 15 ms 5888 KB Output is correct
32 Correct 15 ms 6016 KB Output is correct
33 Correct 43 ms 10232 KB Output is correct
34 Correct 44 ms 10232 KB Output is correct
35 Correct 991 ms 87160 KB Output is correct
36 Correct 211 ms 20984 KB Output is correct
37 Correct 768 ms 66768 KB Output is correct
38 Execution timed out 1098 ms 100784 KB Time limit exceeded
39 Halted 0 ms 0 KB -