Submission #1083309

#TimeUsernameProblemLanguageResultExecution timeMemory
1083309hohemheinMecho (IOI09_mecho)C++17
22 / 100
45 ms12448 KiB
#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] == 'G' && 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]] == 'G' && 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}); bear[X.f][X.s] = bee[X.f][X.s] -1; 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]; else cout <<"-1\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...