Submission #897768

#TimeUsernameProblemLanguageResultExecution timeMemory
897768ivazivaMecho (IOI09_mecho)C++14
73 / 100
109 ms11904 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=dist1[a][b]; long long rez=-1; while (l<=r) { long long mid=(l+r)/2; bfs2(a,b,mid); if (dist2[c][d]!=LLONG_MAX and dist2[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:129:23: warning: 'd' may be used uninitialized in this function [-Wmaybe-uninitialized]
  129 |         if (dist2[c][d]!=LLONG_MAX and dist2[c][d]!=-1)
      |             ~~~~~~~~~~^
mecho.cpp:129:23: warning: 'c' may be used uninitialized in this function [-Wmaybe-uninitialized]
mecho.cpp:123:15: warning: 'b' may be used uninitialized in this function [-Wmaybe-uninitialized]
  123 |     long long r=dist1[a][b];
      |               ^
mecho.cpp:123:15: warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]
#Verdict Execution timeMemoryGrader output
Fetching results...