# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
572925 | 2022-06-05T13:46:56 Z | iancu | 유괴 2 (JOI17_abduction2) | C++14 | 5000 ms | 1900 KB |
#include <bits/stdc++.h> #define NORTH 0 #define SOUTH 1 #define EAST 2 #define WEST 3 using namespace std; const int N = 5e4 + 5; struct Node { unsigned short x, y; int val; char dir; int dist; bool operator<(const Node& n) const { return val > n.val; //return make_tuple(x, y, dir) < make_tuple(n.x, n.y, n.dir); } }; int h, w; int a[N], b[N]; vector<unsigned short> nxt0(N, 0); vector<unsigned short> nxt1(N, 0); vector<unsigned short> nxt2(N, 0); vector<unsigned short> nxt3(N, 0); vector<int> dp1sus(N, 0); vector<int> dp1jos(N, 0); vector<int> dp2st(N, 0); vector<int> dp2dr(N, 0); int solve(int x, int y, int dir) { fill(nxt0.begin(), nxt0.begin() + max(h, w) + 2, 0); fill(nxt1.begin(), nxt1.begin() + max(h, w) + 2, 0); fill(nxt2.begin(), nxt2.begin() + max(h, w) + 2, 0); fill(nxt3.begin(), nxt3.begin() + max(h, w) + 2, 0); fill(dp1sus.begin(), dp1sus.begin() + max(h, w) + 2, 0); fill(dp1jos.begin(), dp1jos.begin() + max(h, w) + 2, 0); fill(dp2st.begin(), dp2st.begin() + max(h, w) + 2, 0); fill(dp2dr.begin(), dp2dr.begin() + max(h, w) + 2, 0); int hl, hr, wl, wr; int ans = 0; hl = hr = x; wl = wr = y; if (dir == 0) hl = max(hl - 1, 1); else if (dir == 1) hr = min(hr + 1, h); else if (dir == 2) wr = min(wr + 1, w); else wl = max(wl - 1, 1); priority_queue<Node> pq; pq.push({x, y, 0, dir, 0}); while (!pq.empty()) { auto n = pq.top(); //cout << n.x << " " << n.y << " " << n.dir << " " << n.dist << endl; pq.pop(); ans = max(ans, n.dist); if (n.dir == NORTH && n.x == 1) continue; if (n.dir == SOUTH && n.x == h) continue; if (n.dir == EAST && n.y == w) continue; if (n.dir == WEST && n.y == 1) continue; if (n.dir == NORTH) { if (nxt0[n.y] != 0) { } else { while (hl > 1 && a[hl] <= b[n.y]) --hl; if (a[hl] <= b[n.y]) { ans = max(ans, n.dist + n.x - hl); continue; } nxt0[n.y] = hl; } pair<int, int> urm = {nxt0[n.y], n.y}; if (dp1sus[n.y] >= n.dist + n.x - urm.first) continue; dp1sus[n.y] = n.dist + n.x - urm.first; pq.push({urm.first, urm.second, a[urm.first], WEST, n.dist + n.x - urm.first}); pq.push({urm.first, urm.second, a[urm.first], EAST, n.dist + n.x - urm.first}); } else if (n.dir == SOUTH) { if (nxt1[n.y] == 0) { while (hr < h && a[hr] <= b[n.y]) ++hr; if (a[hr] <= b[n.y]) { ans = max(ans, n.dist + hr - n.x); continue; } nxt1[n.y] = hr; } pair<int, int> urm = {nxt1[n.y], n.y}; if (dp1jos[n.y] >= n.dist + urm.first - n.x) continue; dp1jos[n.y] = n.dist + urm.first - n.x; pq.push({urm.first, urm.second, a[urm.first], WEST, n.dist + urm.first - n.x}); pq.push({urm.first, urm.second, a[urm.first], EAST, n.dist + urm.first - n.x}); } else if (n.dir == EAST) { if (nxt2[n.x] == 0) { while (wr < w && b[wr] <= a[n.x]) ++wr; if (b[wr] <= a[n.x]) { ans = max(ans, n.dist + wr - n.y); continue; } nxt2[n.x] = wr; } pair<int, int> urm = {n.x, nxt2[n.x]}; if (dp2dr[n.x] >= n.dist + urm.second - n.y) continue; dp2dr[n.x] = n.dist + urm.second - n.y; pq.push({urm.first, urm.second, b[urm.second], NORTH, n.dist + urm.second - n.y}); pq.push({urm.first, urm.second, b[urm.second], SOUTH, n.dist + urm.second - n.y}); } else { if (nxt3[n.x] == 0) { while (wl > 1 && b[wl] <= a[n.x]) --wl; if (b[wl] <= a[n.x]) { ans = max(ans, n.dist + n.y - wl); continue; } nxt3[n.x] = wl; } pair<int, int> urm = {n.x, nxt3[n.x]}; if (dp2st[n.x] >= n.dist + n.y - urm.second) continue; dp2st[n.x] = n.dist + n.y - urm.second; pq.push({urm.first, urm.second, b[urm.second], NORTH, n.dist + n.y - urm.second}); pq.push({urm.first, urm.second, b[urm.second], SOUTH, n.dist + n.y - urm.second}); } } return ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr); int q; cin >> h >> w >> q; for (int i = 1; i <= h; ++i) cin >> a[i]; for (int i = 1; i <= w; ++i) cin >> b[i]; while (q--) { int x, y; cin >> x >> y; int ans = 0; for (int i = 0; i < 4; ++i) ans = max(ans, solve(x, y, i)); cout << ans << "\n"; } return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 1492 KB | Output is correct |
2 | Correct | 1 ms | 1492 KB | Output is correct |
3 | Correct | 1 ms | 1492 KB | Output is correct |
4 | Correct | 1 ms | 1492 KB | Output is correct |
5 | Correct | 1 ms | 1492 KB | Output is correct |
6 | Correct | 1 ms | 1492 KB | Output is correct |
7 | Correct | 1 ms | 1492 KB | Output is correct |
8 | Correct | 1 ms | 1492 KB | Output is correct |
9 | Correct | 1 ms | 1492 KB | Output is correct |
10 | Correct | 1 ms | 1492 KB | Output is correct |
11 | Correct | 1 ms | 1492 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 1492 KB | Output is correct |
2 | Correct | 1 ms | 1492 KB | Output is correct |
3 | Correct | 1 ms | 1492 KB | Output is correct |
4 | Correct | 1 ms | 1492 KB | Output is correct |
5 | Correct | 1 ms | 1492 KB | Output is correct |
6 | Correct | 1 ms | 1492 KB | Output is correct |
7 | Correct | 1 ms | 1492 KB | Output is correct |
8 | Correct | 1 ms | 1492 KB | Output is correct |
9 | Correct | 1 ms | 1492 KB | Output is correct |
10 | Correct | 1 ms | 1492 KB | Output is correct |
11 | Correct | 1 ms | 1492 KB | Output is correct |
12 | Correct | 1 ms | 1492 KB | Output is correct |
13 | Correct | 1 ms | 1492 KB | Output is correct |
14 | Correct | 1 ms | 1428 KB | Output is correct |
15 | Correct | 1 ms | 1492 KB | Output is correct |
16 | Correct | 1 ms | 1492 KB | Output is correct |
17 | Correct | 1 ms | 1492 KB | Output is correct |
18 | Correct | 1 ms | 1492 KB | Output is correct |
19 | Correct | 3 ms | 1536 KB | Output is correct |
20 | Correct | 6 ms | 1492 KB | Output is correct |
21 | Correct | 4 ms | 1492 KB | Output is correct |
22 | Correct | 6 ms | 1492 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 1492 KB | Output is correct |
2 | Correct | 1 ms | 1492 KB | Output is correct |
3 | Correct | 1 ms | 1492 KB | Output is correct |
4 | Correct | 1 ms | 1492 KB | Output is correct |
5 | Correct | 1 ms | 1492 KB | Output is correct |
6 | Correct | 1 ms | 1492 KB | Output is correct |
7 | Correct | 1 ms | 1492 KB | Output is correct |
8 | Correct | 1 ms | 1492 KB | Output is correct |
9 | Correct | 1 ms | 1492 KB | Output is correct |
10 | Correct | 1 ms | 1492 KB | Output is correct |
11 | Correct | 1 ms | 1492 KB | Output is correct |
12 | Correct | 1 ms | 1492 KB | Output is correct |
13 | Correct | 1 ms | 1492 KB | Output is correct |
14 | Correct | 1 ms | 1428 KB | Output is correct |
15 | Correct | 1 ms | 1492 KB | Output is correct |
16 | Correct | 1 ms | 1492 KB | Output is correct |
17 | Correct | 1 ms | 1492 KB | Output is correct |
18 | Correct | 1 ms | 1492 KB | Output is correct |
19 | Correct | 3 ms | 1536 KB | Output is correct |
20 | Correct | 6 ms | 1492 KB | Output is correct |
21 | Correct | 4 ms | 1492 KB | Output is correct |
22 | Correct | 6 ms | 1492 KB | Output is correct |
23 | Correct | 10 ms | 1900 KB | Output is correct |
24 | Correct | 12 ms | 1868 KB | Output is correct |
25 | Correct | 10 ms | 1884 KB | Output is correct |
26 | Correct | 11 ms | 1824 KB | Output is correct |
27 | Correct | 13 ms | 1876 KB | Output is correct |
28 | Correct | 19 ms | 1820 KB | Output is correct |
29 | Correct | 14 ms | 1876 KB | Output is correct |
30 | Correct | 68 ms | 1888 KB | Output is correct |
31 | Correct | 102 ms | 1792 KB | Output is correct |
32 | Correct | 14 ms | 1880 KB | Output is correct |
33 | Correct | 29 ms | 1876 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 1492 KB | Output is correct |
2 | Correct | 5 ms | 1540 KB | Output is correct |
3 | Correct | 4 ms | 1492 KB | Output is correct |
4 | Correct | 5 ms | 1492 KB | Output is correct |
5 | Correct | 4 ms | 1492 KB | Output is correct |
6 | Correct | 12 ms | 1492 KB | Output is correct |
7 | Correct | 11 ms | 1492 KB | Output is correct |
8 | Correct | 163 ms | 1512 KB | Output is correct |
9 | Correct | 187 ms | 1492 KB | Output is correct |
10 | Correct | 172 ms | 1520 KB | Output is correct |
11 | Correct | 281 ms | 1512 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 1492 KB | Output is correct |
2 | Correct | 1 ms | 1492 KB | Output is correct |
3 | Correct | 1 ms | 1492 KB | Output is correct |
4 | Correct | 1 ms | 1492 KB | Output is correct |
5 | Correct | 1 ms | 1492 KB | Output is correct |
6 | Correct | 1 ms | 1492 KB | Output is correct |
7 | Correct | 1 ms | 1492 KB | Output is correct |
8 | Correct | 1 ms | 1492 KB | Output is correct |
9 | Correct | 1 ms | 1492 KB | Output is correct |
10 | Correct | 1 ms | 1492 KB | Output is correct |
11 | Correct | 1 ms | 1492 KB | Output is correct |
12 | Correct | 1 ms | 1492 KB | Output is correct |
13 | Correct | 1 ms | 1492 KB | Output is correct |
14 | Correct | 1 ms | 1428 KB | Output is correct |
15 | Correct | 1 ms | 1492 KB | Output is correct |
16 | Correct | 1 ms | 1492 KB | Output is correct |
17 | Correct | 1 ms | 1492 KB | Output is correct |
18 | Correct | 1 ms | 1492 KB | Output is correct |
19 | Correct | 3 ms | 1536 KB | Output is correct |
20 | Correct | 6 ms | 1492 KB | Output is correct |
21 | Correct | 4 ms | 1492 KB | Output is correct |
22 | Correct | 6 ms | 1492 KB | Output is correct |
23 | Correct | 10 ms | 1900 KB | Output is correct |
24 | Correct | 12 ms | 1868 KB | Output is correct |
25 | Correct | 10 ms | 1884 KB | Output is correct |
26 | Correct | 11 ms | 1824 KB | Output is correct |
27 | Correct | 13 ms | 1876 KB | Output is correct |
28 | Correct | 19 ms | 1820 KB | Output is correct |
29 | Correct | 14 ms | 1876 KB | Output is correct |
30 | Correct | 68 ms | 1888 KB | Output is correct |
31 | Correct | 102 ms | 1792 KB | Output is correct |
32 | Correct | 14 ms | 1880 KB | Output is correct |
33 | Correct | 29 ms | 1876 KB | Output is correct |
34 | Correct | 5 ms | 1492 KB | Output is correct |
35 | Correct | 5 ms | 1540 KB | Output is correct |
36 | Correct | 4 ms | 1492 KB | Output is correct |
37 | Correct | 5 ms | 1492 KB | Output is correct |
38 | Correct | 4 ms | 1492 KB | Output is correct |
39 | Correct | 12 ms | 1492 KB | Output is correct |
40 | Correct | 11 ms | 1492 KB | Output is correct |
41 | Correct | 163 ms | 1512 KB | Output is correct |
42 | Correct | 187 ms | 1492 KB | Output is correct |
43 | Correct | 172 ms | 1520 KB | Output is correct |
44 | Correct | 281 ms | 1512 KB | Output is correct |
45 | Correct | 39 ms | 1876 KB | Output is correct |
46 | Correct | 39 ms | 1796 KB | Output is correct |
47 | Correct | 44 ms | 1816 KB | Output is correct |
48 | Correct | 45 ms | 1888 KB | Output is correct |
49 | Correct | 45 ms | 1876 KB | Output is correct |
50 | Correct | 278 ms | 1884 KB | Output is correct |
51 | Correct | 240 ms | 1884 KB | Output is correct |
52 | Correct | 3845 ms | 1888 KB | Output is correct |
53 | Correct | 3848 ms | 1892 KB | Output is correct |
54 | Correct | 3530 ms | 1884 KB | Output is correct |
55 | Execution timed out | 5012 ms | 1876 KB | Time limit exceeded |
56 | Halted | 0 ms | 0 KB | - |