Submission #1156211

#TimeUsernameProblemLanguageResultExecution timeMemory
1156211irmuunMaze (JOI23_ho_t3)C++20
19 / 100
2098 ms174604 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() ll r,c,n; ll sr,sc; ll gr,gc; vector<vector<ll>>g,dist; vector<vector<char>>s; vector<ll>adj,ans; vector<ll>dx={0,0,-1,1}; vector<ll>dy={-1,1,0,0}; ll G=0;//group number void dfs(ll x,ll y){ for(ll k=0;k<4;k++){ ll nx=x+dx[k],ny=y+dy[k]; if(nx<1||ny<1||nx>r||ny>c||s[nx][ny]=='#'||g[nx][ny]!=0) continue; g[nx][ny]=G; dfs(nx,ny); } } ll calc(ll x,ll y){ if(x>y) swap(x,y); ll lo=0,hi=r*c; while(lo<hi){ ll mid=(lo+hi)/2; ll sum=(n*mid+1)+(mid*n-mid); if(x+y<=sum&&y<=n*mid+1){ hi=mid; } else{ lo=mid+1; } } return lo; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>r>>c>>n; cin>>sr>>sc; cin>>gr>>gc; s.resize(r+1); for(ll i=1;i<=r;i++){ s[i].resize(c+1); for(ll j=1;j<=c;j++){ cin>>s[i][j]; } } g.resize(r+1); for(ll i=1;i<=r;i++){ g[i].resize(c+1); } for(ll i=1;i<=r;i++){ for(ll j=1;j<=c;j++){ if(g[i][j]==0&&s[i][j]=='.'){ G++; g[i][j]=G; dfs(i,j); } } } ans.resize(G+1); fill(all(ans),1e9); dist.resize(G+1); for(ll i=1;i<=G;i++){ dist[i].resize(G+1); fill(all(dist[i]),1e9); } for(ll i=1;i<=r;i++){ for(ll j=1;j<=c;j++){ for(ll x=1;x<=r;x++){ for(ll y=1;y<=c;y++){ if(g[i][j]==0||g[x][y]==0||g[i][j]==g[x][y]) continue; ll f=calc(abs(i-x),abs(j-y)); ll g1=g[i][j],g2=g[x][y]; dist[g1][g2]=min(dist[g1][g2],f); dist[g2][g1]=min(dist[g2][g1],f); } } } } for(ll i=1;i<=G;i++){ for(ll j=1;j<=G;j++){ if(dist[i][j]==1e9) dist[i][j]=0; } } ans[g[sr][sc]]=0; set<array<ll,2>>q; q.insert({0,g[sr][sc]}); while(!q.empty()){ auto [L,x]=*q.begin(); q.erase(q.begin()); if(ans[x]!=L) continue; for(ll y=1;y<=G;y++){ if(ans[x]+dist[x][y]<ans[y]){ ans[y]=ans[x]+dist[x][y]; q.insert({ans[y],y}); } } } cout<<ans[g[gr][gc]]; }
#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...