# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1083307 | hohemhein | Mecho (IOI09_mecho) | C++17 | 42 ms | 12380 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define ii pair<int,int>
#define iii pair<ii,int>
#define iiii pair<ii,ii>
#define f first
#define s second
#define pb push_back
#define pu push
#define ll long long
#define int long long
#define endl "\n"
#define all(x) (x).begin() , (x).end()
using namespace std;
const int nmax = 8e2+4;
const int oo = 1e12+3;
const ll mod = 1e9+7;
char m[nmax][nmax];
int bee[nmax][nmax];
int bear[nmax][nmax];
int mov[] = { 1,-1 };
void llenar(){
for( int i = 0; i < nmax; i++ ){
fill( bear[i], bear[i]+nmax, oo );
fill( bee[i], bee[i]+nmax, oo );
}
}
void bfsBee( vector<ii>&aux, int n ){
queue<ii>c;
for( auto [i,j] : aux ){
c.pu({i,j});
bee[i][j] = 0;
}
while( !c.empty() ){
auto [x,y] = c.front();
c.pop();
for( int i = 0; i < 2; i++ )
if( x+mov[i] > 0 && x+mov[i] <= n && m[ x+mov[i] ][y] != 'T' && bee[ x+mov[i] ][y] == oo ){
c.pu( {x+mov[i],y} );
bee[ x+mov[i] ][y] = bee[x][y]+1;
}
for( int i = 0; i < 2; i++ )
if( y+mov[i] > 0 && y+mov[i] <= n && m[x][y+mov[i]] != 'T' && bee[x][y+mov[i]] == oo ){
c.pu( {x,y+mov[i]} );
bee[x][y+mov[i]] = bee[x][y]+1;
}
}
}
void bfsBear( ii X, int n, int k ){
queue<iii>c;
c.pu({{X.f,X.s},0});
while( !c.empty() ){
auto [x,y] = c.front().f; int pe = c.front().s;
c.pop();
for( int i = 0; i < 2; i++ )
if( x+mov[i] > 0 && x+mov[i] <= n && m[ x+mov[i] ][y] != 'T' && bear[ x+mov[i] ][y] == oo && bee[ x+mov[i] ][y] > pe/k ){
c.pu( { {x+mov[i],y}, pe+1 } );
bear[ x+mov[i] ][y] = min( bear[x][y] , bee[ x+mov[i] ][y] - pe/k - 1 );
}
for( int i = 0; i < 2; i++ )
if( y+mov[i] > 0 && y+mov[i] <= n && m[x][y+mov[i]] != 'T'&& bear[x][y+mov[i]] == oo && bee[x][y+mov[i]] > pe/k ){
c.pu( {{x,y+mov[i]},pe+1} );
bear[x][y+mov[i]] = min( bear[x][y] , bee[x][y+mov[i]] - pe/k - 1 );
}
}
}
int32_t main()
{
ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie();
//cout << fixed << setprecision(4);
/*ifstream cin ("atlarge.in");
ofstream cout ("atlarge.out");*/
llenar();
int n, k; cin >> n >> k;
ii init, meta;
vector<ii>aux;
for( int i = 1; i <= n; i++ )
for( int j = 1; j <= n; j++ ){
cin >> m[i][j];
if( m[i][j] == 'H' )aux.pb({i,j});
else if( m[i][j] == 'M' )init = {i,j};
else if( m[i][j] == 'D' )meta = {i,j};
}
bfsBee( aux, n );
bfsBear( init, n, k);
if( bear[meta.f][meta.s] != oo )cout << bear[meta.f][meta.s] <<"\n";
else cout <<"-1\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |