# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
49691 | 2018-06-02T08:21:14 Z | 강태규(#1275, imeimi2000) | Dangerous Skating (JOI16_skating) | C++11 | 3 ms | 716 KB |
#include <iostream> #include <algorithm> #include <vector> #include <queue> #include <deque> #include <set> #include <map> #include <unordered_map> #include <functional> #include <cstring> #include <cmath> #include <ctime> #include <cstdlib> using namespace std; typedef long long llong; typedef long double ld; typedef pair<int, int> pii; typedef pair<llong, llong> pll; struct node { int x, y, d; bool operator<(const node &p) const { return d > p.d; } }; const int inf = 1e8; int r, c; char grid[1000][1001]; int close[4][1000][1000]; int dist[1000][1000]; priority_queue<node> pq; void pushDist(int x, int y, int d) { if (0 <= x && x < r && 0 <= y && y < c) { if (dist[x][y] <= d) return; dist[x][y] = d; pq.push({ x, y, d }); } } const int gox[4] = { -1, 0, 1, 0 }; const int goy[4] = { 0, -1, 0, 1 }; int main() { scanf("%d%d", &r, &c); int sx, sy, ex, ey; for (int i = 0; i < r; ++i) { scanf("%s", grid[i]); for (int j = 0; j < c; ++j) { dist[i][j] = inf; } } scanf("%d%d%d%d", &sx, &sy, &ex, &ey); --sx; --sy; --ex; --ey; for (int i = 0; i < r; ++i) { for (int j = 0; j < c; ++j) { if (grid[i][j] != '#') { close[0][i][j] = close[0][i - 1][j] + 1; close[1][i][j] = close[1][i][j - 1] + 1; } else close[0][i][j] = close[1][i][j] = -1; } } for (int i = r; i--; ) { for (int j = c; j--; ) { if (grid[i][j] != '#') { close[2][i][j] = close[2][i + 1][j] + 1; close[3][i][j] = close[3][i][j + 1] + 1; } else close[2][i][j] = close[3][i][j] = -1; } } pushDist(sx, sy, 0); while (!pq.empty()) { node tp = pq.top(); pq.pop(); int x = tp.x, y = tp.y, d = tp.d; if (x == ex && y == ey) { printf("%d\n", d); return 0; } if (dist[x][y] != d) continue; for (int i = 0; i < 4; ++i) { int l = close[i][x][y]; pushDist(x + gox[i] * l, y + goy[i] * l, d + 1); pushDist(x + gox[i], y + goy[i], d + 2); } } printf("-1\n"); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 632 KB | Output is correct |
2 | Correct | 2 ms | 640 KB | Output is correct |
3 | Incorrect | 2 ms | 716 KB | Output isn't correct |
4 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 632 KB | Output is correct |
2 | Correct | 2 ms | 640 KB | Output is correct |
3 | Incorrect | 2 ms | 716 KB | Output isn't correct |
4 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 632 KB | Output is correct |
2 | Correct | 2 ms | 640 KB | Output is correct |
3 | Incorrect | 2 ms | 716 KB | Output isn't correct |
4 | Halted | 0 ms | 0 KB | - |