Submission #897564

#TimeUsernameProblemLanguageResultExecution timeMemory
897564ivazivaMecho (IOI09_mecho)C++14
36 / 100
53 ms22108 KiB
#include <bits/stdc++.h> using namespace std; #define MAXN 810 long long n; long long s; char matrica[MAXN][MAXN]; long long dist1[MAXN][MAXN];///bee bfs long long dist2[MAXN][MAXN];///mecho bfs pair<long long,long long> parent[MAXN][MAXN]; queue<pair<long long,long long>> bfsq1; queue<pair<long long,long long>> bfsq2; bool check(long long x,long long y) { if (x>=1 and x<=n and y>=1 and y<=n and matrica[x][y]!='T') return true; else return false; } void bfs1() { while (bfsq1.empty()==false) { long long x=bfsq1.front().first; long long y=bfsq1.front().second; bfsq1.pop(); if (check(x+1,y) and dist1[x+1][y]==LLONG_MAX) { dist1[x+1][y]=dist1[x][y]+1; bfsq1.push({x+1,y}); } if (check(x-1,y) and dist1[x-1][y]==LLONG_MAX) { dist1[x-1][y]=dist1[x][y]+1; bfsq1.push({x-1,y}); } if (check(x,y+1) and dist1[x][y+1]==LLONG_MAX) { dist1[x][y+1]=dist1[x][y]+1; bfsq1.push({x,y+1}); } if (check(x,y-1) and dist1[x][y-1]==LLONG_MAX) { dist1[x][y-1]=dist1[x][y]+1; bfsq1.push({x,y-1}); } } } void bfs2(long long a,long long b) { dist2[a][b]=0; bfsq2.push({a,b}); while (bfsq2.empty()==false) { long long x=bfsq2.front().first; long long y=bfsq2.front().second; bfsq2.pop(); if (check(x+1,y) and dist2[x+1][y]==LLONG_MAX) { long long d=dist2[x][y]+1; if (d<dist1[x+1][y]*s) dist2[x+1][y]=d; else dist2[x+1][y]=-1; if (dist2[x+1][y]!=-1) parent[x+1][y]={x,y}; if (dist2[x+1][y]!=-1) bfsq2.push({x+1,y}); } if (check(x-1,y) and dist2[x-1][y]==LLONG_MAX) { long long d=dist2[x][y]+1; if (d<dist1[x-1][y]*s) dist2[x-1][y]=d; else dist2[x-1][y]=-1; if (dist2[x-1][y]!=-1) parent[x-1][y]={x,y}; if (dist2[x-1][y]!=-1) bfsq2.push({x-1,y}); } if (check(x,y+1) and dist2[x][y+1]==LLONG_MAX) { long long d=dist2[x][y]+1; if (d<dist1[x][y+1]*s) dist2[x][y+1]=d; else dist2[x][y+1]=-1; if (dist2[x][y+1]!=-1) parent[x][y+1]={x,y}; if (dist2[x][y+1]!=-1) bfsq2.push({x,y+1}); } if (check(x,y-1) and dist2[x][y-1]==LLONG_MAX) { long long d=dist2[x][y]+1; if (d<dist1[x][y-1]*s) dist2[x][y-1]=d; else dist2[x][y-1]=-1; if (dist2[x][y-1]!=-1) parent[x][y-1]={x,y}; if (dist2[x][y-1]!=-1) bfsq2.push({x,y-1}); } } } int main() { cin>>n>>s; for (long long i=1;i<=n;i++) { for (long long j=1;j<=n;j++) { dist1[i][j]=LLONG_MAX; dist2[i][j]=LLONG_MAX; } } long long a,b; long long c,d; for (long long i=1;i<=n;i++) { for (long long j=1;j<=n;j++) { cin>>matrica[i][j]; if (matrica[i][j]=='H') { dist1[i][j]=0; bfsq1.push({i,j}); } if (matrica[i][j]=='M') {a=i;b=j;} if (matrica[i][j]=='D') {c=i;d=j;} } } bfs1(); bfs2(a,b); deque<pair<long long,long long>> dek; pair<long long,long long> tren={c,d}; dek.push_front(tren); while (parent[tren.first][tren.second].first!=0) { pair<long long,long long> par=parent[tren.first][tren.second]; dek.push_front(par); tren=par; } long long ans=LLONG_MAX; while (dek.empty()==false) { long long x=dek.front().first; long long y=dek.front().second; if (x==c and y==d) break; long long val=dist2[x][y]; long long z=val/s; long long br=dist1[x][y]-z-1; ans=min(ans,br); dek.pop_front(); } cout<<ans<<endl; }

Compilation message (stderr)

mecho.cpp: In function 'int main()':
mecho.cpp:136:18: warning: 'd' may be used uninitialized in this function [-Wmaybe-uninitialized]
  136 |         if (x==c and y==d) break;
      |             ~~~~~^~~~~~~~
mecho.cpp:136:9: warning: 'c' may be used uninitialized in this function [-Wmaybe-uninitialized]
  136 |         if (x==c and y==d) break;
      |         ^~
mecho.cpp:122:17: warning: 'b' may be used uninitialized in this function [-Wmaybe-uninitialized]
  122 |     bfs1(); bfs2(a,b);
      |             ~~~~^~~~~
mecho.cpp:122:17: warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]
#Verdict Execution timeMemoryGrader output
Fetching results...