Submission #1326089

#TimeUsernameProblemLanguageResultExecution timeMemory
1326089hectormedranoMecho (IOI09_mecho)C++20
11 / 100
1097 ms47516 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector<vector<ll>> v; ll N, S, ini, fin; bool solve(ll T, deque<pair<ll, ll>> bfs, vector<bool> vis, vector<char> ori){ bfs.push_front({ini, -(T+1)}); vis[ini] = true; while(bfs.size() != 0){ pair<ll, ll> p = bfs.front(); ll x = p.first; ll e = p.second; bfs.pop_front(); if(e == -1){ bfs.push_front({x, S+1}); continue; } if(e < -1){ bfs.push_back({x, e+1}); continue; } for(ll y : v[x]){ if(vis[y]){continue;} if(ori[y] == 'D' and ori[x] == 'H'){continue;} vis[y] = true; ori[y] = ori[x]; //cout<<"Casilla "<<y/N<<" "<<y%N<<" pasa a tener origen "<<ori[y]<<endl; if(e == 1){bfs.push_back({y, S+1});} if(e > 1){bfs.push_front({y, e-1});} if(e == 0){bfs.push_back({y, 0});} } } return (ori[fin] == 'M'); } int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); cin>>N>>S; v.resize(N*N); vector<char> c(N*N); deque<pair<ll, ll>> d; vector<bool> fij(N*N, false); for(ll i=0;i<N;i++){ for(ll j=0;j<N;j++){ cin>>c[N*i+j]; if(c[N*i+j] == 'H'){ d.push_back({N*i+j, 0}); fij[N*i+j] = true; } if(c[N*i+j] == 'M'){ini = N*i+j;} if(c[N*i+j] == 'D'){ fin = N*i+j; } } } for(ll i=0;i<N;i++){ for(ll j=0;j<N;j++){ if(i > 0 and c[N*(i-1)+j] != 'T'){ v[N*i+j].push_back(N*(i-1)+j); } if(i < N-1 and c[N*(i+1)+j] != 'T'){ v[N*i+j].push_back(N*(i+1)+j); } if(j > 0 and c[N*i+(j-1)] != 'T'){ v[N*i+j].push_back(N*i+(j-1)); } if(j < N-1 and c[N*i+(j+1)] != 'T'){ v[N*i+j].push_back(N*i+(j+1)); } } } solve(1, d, fij, c); if(!(solve(0, d, fij, c))){cout<<-1; return 0;} ll l = 0; ll r = N*N; while(r != l+1){ ll m = (l+r)/2; if(solve(m, d, fij, c)){l = m;} else{r = m;} //cout<<l<<" "<<r<<endl; } cout<<l; }
#Verdict Execution timeMemoryGrader output
Fetching results...