Submission #869026

#TimeUsernameProblemLanguageResultExecution timeMemory
869026HuyQuang_re_ZeroMecho (IOI09_mecho)C++14
100 / 100
153 ms7512 KiB
#include <bits/stdc++.h> #define ll long long #define db long double #define N 805 #define II pair <ll,ll> #define III pair <ll,II> #define IV pair <vector <int>,vector <int> > #define fst first #define snd second #define BIT(x,i) ((x>>i)&1) #define Log(x) (31-__builtin_clz((int)x)) #define LogLL(x) (63-__builtin_clzll((ll)x)) #define pi acos(-1) #define to_radian(x) (x*pi/180.0) #define to_degree(x) (x*180.0/pi) using namespace std; queue <II> q; int n,i,j,x,y,bee[N][N],bear[N][N],s,X,Y; char a[N][N]; void bee_consider(int x,int y,int k) { if(bee[x][y]>k && (a[x][y]=='H' || a[x][y]=='M' || a[x][y]=='G')) { q.push({ x,y }); bee[x][y]=k; } } void bear_consider(int x,int y,int k) { if(bear[x][y]>k && (a[x][y]=='M' || a[x][y]=='D' || a[x][y]=='G')) { if(k/s>=bee[x][y]) return ; q.push({ x,y }); bear[x][y]=k; } } bool check(int k) { memset(bear,63,sizeof(bear)); while(q.size()>0) q.pop(); bear_consider(X,Y,k*s); while(q.size()>0) { int x=q.front().fst,y=q.front().snd,k=bear[x][y]; q.pop(); if(a[x][y]=='D') return 1; bear_consider(x-1,y,k+1); bear_consider(x+1,y,k+1); bear_consider(x,y-1,k+1); bear_consider(x,y+1,k+1); } return 0; } int main() { // freopen("mecho.inp","r",stdin); //freopen("mecho.out","w",stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>s; memset(bee,63,sizeof(bee)); for(i=1;i<=n;i++) for(j=1;j<=n;j++) { cin>>a[i][j]; if(a[i][j]=='H') bee_consider(i,j,0); if(a[i][j]=='M') X=i,Y=j; } while(q.size()>0) { int x=q.front().fst,y=q.front().snd; q.pop(); bee_consider(x-1,y,bee[x][y]+1); bee_consider(x+1,y,bee[x][y]+1); bee_consider(x,y-1,bee[x][y]+1); bee_consider(x,y+1,bee[x][y]+1); } int l=0,r=n*n+1; while(l<r) { int mid=(l+r+1)>>1; if(check(mid)) l=mid; else r=mid-1; } if(check(l)) cout<<l; else cout<<-1; }
#Verdict Execution timeMemoryGrader output
Fetching results...