Submission #129520

#TimeUsernameProblemLanguageResultExecution timeMemory
129520choikiwonDangerous Skating (JOI16_skating)C++17
100 / 100
946 ms125424 KiB
#include<bits/stdc++.h> using namespace std; typedef pair<int, int> pii; const int MN = 1010; int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; int R, C; char G[MN][MN]; pii S, T; int cc[MN][MN][4]; int dp(int r, int c, int d) { int &ret = cc[r][c][d]; if(ret != -1) return ret; int nr = r + dy[d]; int nc = c + dx[d]; if(G[nr][nc] == '#') return ret = r * C + c; else return ret = dp(nr, nc, d); } vector<pii> adj[MN * MN]; priority_queue<pii> pq; int dist[MN * MN]; void dijkstra(int s) { for(int i = 0; i < R * C; i++) dist[i] = 1e9; pq.push(pii(0, s)); dist[s] = 0; while(!pq.empty()) { int u = pq.top().second; int ud = -pq.top().first; pq.pop(); if(dist[u] < ud) continue; for(int i = 0; i < adj[u].size(); i++) { int v = adj[u][i].first; int w = adj[u][i].second; if(dist[v] > dist[u] + w) { dist[v] = dist[u] + w; pq.push(pii(-dist[v], v)); } } } } int main() { std::ios::sync_with_stdio(false); cin >> R >> C; for(int i = 0; i < R; i++) { for(int j = 0; j < C; j++) { cin >> G[i][j]; } } cin >> S.first >> S.second >> T.first >> T.second; S.first--; S.second--; T.first--; T.second--; memset(cc, -1, sizeof(cc)); for(int i = 1; i < R - 1; i++) { for(int j = 1; j < C - 1; j++) { for(int k = 0; k < 4; k++) { int ni = i + dy[k]; int nj = j + dx[k]; if(G[ni][nj] == '#') continue; adj[i * C + j].push_back(pii(ni * C + nj, 2)); adj[i * C + j].push_back(pii(dp(i, j, k), 1)); } } } dijkstra(S.first * C + S.second); if(dist[T.first * C + T.second] == 1e9) cout << -1; else cout << dist[T.first * C + T.second]; }

Compilation message (stderr)

skating.cpp: In function 'void dijkstra(int)':
skating.cpp:41:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 0; i < adj[u].size(); i++) {
                        ~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...