Submission #1262377

#TimeUsernameProblemLanguageResultExecution timeMemory
1262377PlayVoltzMaze (JOI23_ho_t3)C++20
100 / 100
1959 ms195580 KiB
#include <cstdio> #include <stdio.h> #include <stdbool.h> #include <iostream> #include <map> #include <vector> #include <climits> #include <stack> #include <string> #include <queue> #include <algorithm> #include <set> #include <unordered_set> #include <unordered_map> #include <cmath> #include <cctype> #include <bitset> #include <iomanip> #include <cstring> #include <numeric> #include <cassert> #include <random> #include <chrono> #include <fstream> using namespace std; #define int long long #define pii pair<int, int> #define mp make_pair #define pb push_back #define fi first #define se second int dy[8]={0, 0, -1, 1, -1, 1, -1, 1}; int dx[8]={1, -1, 0, 0, -1, 1, 1, -1}; int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, k, sx, sy, ex, ey; cin>>n>>m>>k>>sx>>sy>>ex>>ey, --sx, --sy, --ex, --ey; vector<string> graph(n); for (int i=0; i<n; ++i)cin>>graph[i]; vector<vector<bool> > visited(n, vector<bool>(m, 0)); vector<vector<pii> > dist(n, vector<pii>(m, mp(LLONG_MAX/2, LLONG_MAX/2))); priority_queue<pair<pii, pii>, vector<pair<pii, pii> >, greater<pair<pii, pii> > > pq; dist[sx][sy]=mp(0, k-1); pq.push(mp(mp(0, k-1), mp(sx, sy))); while (pq.size()){ int x=pq.top().se.fi, y=pq.top().se.se; pq.pop(); if (visited[x][y])continue; visited[x][y]=1; for (int i=0; i<4; ++i){ int nx=x+dx[i], ny=y+dy[i]; if (nx<0||ny<0||nx>=n||ny>=m||visited[nx][ny])continue; if (graph[nx][ny]=='.'&&mp(dist[x][y].fi, k-1)<dist[nx][ny]){ dist[nx][ny]=mp(dist[x][y].fi, k-1); pq.push(mp(mp(dist[x][y].fi, k-1), mp(nx, ny))); } if (mp(dist[x][y].fi+1, 0ll)<dist[nx][ny]){ dist[nx][ny]=mp(dist[x][y].fi+1, 0ll); pq.push(mp(mp(dist[x][y].fi+1, 0ll), mp(nx, ny))); } } if (dist[x][y].se!=k-1)for (int i=0; i<8; ++i){ int nx=x+dx[i], ny=y+dy[i]; if (nx<0||ny<0||nx>=n||ny>=m||visited[nx][ny])continue; if (mp(dist[x][y].fi, dist[x][y].se+1)<dist[nx][ny]){ dist[nx][ny]=mp(dist[x][y].fi, dist[x][y].se+1); pq.push(mp(mp(dist[x][y].fi, dist[x][y].se+1), mp(nx, ny))); } } } cout<<dist[ex][ey].fi; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...