Submission #897792

#TimeUsernameProblemLanguageResultExecution timeMemory
897792ivazivaMecho (IOI09_mecho)C++17
84 / 100
125 ms12124 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 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,long long mid) { for (long long i=1;i<=n;i++) { for (long long j=1;j<=n;j++) dist2[i][j]=LLONG_MAX; } dist2[a][b]=mid*s; 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) 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) 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) 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) bfsq2.push({x,y-1}); } } } int main() { ios_base::sync_with_stdio(false); ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>s; for (long long i=1;i<=n;i++) { for (long long j=1;j<=n;j++) dist1[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(); long long l=0; long long r=n*n; long long rez=-1; while (l<=r) { long long mid=(l+r)/2; bfs2(a,b,mid); if (dist2[c-1][d]!=LLONG_MAX and dist2[c-1][d]!=-1 and check(c-1,d)) {rez=mid;l=mid+1;} else if (dist2[c+1][d]!=LLONG_MAX and dist2[c+1][d]!=-1 and check(c+1,d)) {rez=mid;l=mid+1;} else if (dist2[c][d-1]!=LLONG_MAX and dist2[c][d-1]!=-1 and check(c,d-1)) {rez=mid;l=mid+1;} else if (dist2[c][d+1]!=LLONG_MAX and dist2[c][d+1]!=-1 and check(c,d+1)) {rez=mid;l=mid+1;} else r=mid-1; } cout<<rez<<endl; }

Compilation message (stderr)

mecho.cpp: In function 'int main()':
mecho.cpp:106:17: warning: 'd' may be used uninitialized in this function [-Wmaybe-uninitialized]
  106 |     long long c,d;
      |                 ^
mecho.cpp:106:15: warning: 'c' may be used uninitialized in this function [-Wmaybe-uninitialized]
  106 |     long long c,d;
      |               ^
mecho.cpp:128:13: warning: 'b' may be used uninitialized in this function [-Wmaybe-uninitialized]
  128 |         bfs2(a,b,mid);
      |         ~~~~^~~~~~~~~
mecho.cpp:128:13: warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]
#Verdict Execution timeMemoryGrader output
Fetching results...