제출 #484555

#제출 시각아이디문제언어결과실행 시간메모리
484555Sho10Mecho (IOI09_mecho)C++17
4 / 100
1 ms300 KiB
#include <bits/stdc++.h> //Andrei Alexandru a.k.a Sho #define ll long long #define double long double #pragma GCC optimize("O3") #pragma GCC optimize("Ofast") #define aint(a) (a).begin(), (a).end() #define f first #define s second #define pb push_back #define mp make_pair #define pi pair #define rc(s) return cout<<s,0 #define endl '\n' #define mod 998244353 #define PI 3.14159265359 #define INF 1000000005 #define LINF 1000000000000000005ll #define CODE_START ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); using namespace std; ll n,s,sx,sy,dbees[805][805],d[805][805],viz[805][805],fx,fy; pair<ll,ll>direction[5]; char a[805][805]; vector<pair<ll,ll>>hive; ll check(ll x,ll y){ if(x>=1&&y>=1&&x<=n&&y<=n){ return 1; }else return 0; } ll verif(ll time){ for(ll i=1;i<=n;i++) for(ll j=1;j<=n;j++) { d[i][j]=LINF; viz[i][j]=0; } queue<pair<ll,ll>>q; d[sx][sy]=0; viz[sx][sy]=1; q.push(mp(sx,sy)); if(dbees[sx][sy]<=time){ q.pop(); } while(!q.empty()){ ll x,y; x=q.front().f; y=q.front().s; //cout<<x<<' '<<y<<endl; q.pop(); for(ll i=0;i<4;i++) { ll xx,yy; xx=x+direction[i].f; yy=y+direction[i].s; if(a[xx][yy]=='T'||a[xx][yy]=='H'){ continue; } if(check(xx,yy)==0){ continue; } if(viz[xx][yy]==1){ continue; } if((d[x][y]+1)/s>=dbees[xx][yy]-time){ continue; } viz[xx][yy]=1; d[xx][yy]=d[x][y]+1; q.push(mp(xx,yy)); } } ll ans=0; for(ll i=0;i<4;i++) { ll x=fx+direction[i].f,y=fy+direction[i].s; if(check(x,y)==0){ continue; } if(viz[x][y]==0){ continue; } if((d[x][y]/s)<dbees[x][y]-time){ ans=1; } } return ans; } int32_t main(){ //CODE_START; ifstream cin("input.in"); direction[0]=mp(-1,0); direction[1]=mp(1,0); direction[2]=mp(0,-1); direction[3]=mp(0,1); cin>>n>>s; for(ll i=1;i<=n;i++) { for(ll j=1;j<=n;j++) { cin>>a[i][j]; if(a[i][j]=='M'){ sx=i; sy=j; }else if(a[i][j]=='H'){ hive.pb(mp(i,j)); }else if(a[i][j]=='D'){ fx=i; fy=j; } } } for(ll i=1;i<=n;i++) { for(ll j=1;j<=n;j++) { dbees[i][j]=LINF; } } queue<pair<ll,ll>>q; for(auto it : hive){ q.push(it); dbees[it.f][it.s]=0; } while(!q.empty()){ ll x,y; x=q.front().f; y=q.front().s; q.pop(); for(ll i=0;i<4;i++) { ll xx,yy; xx=x+direction[i].f; yy=y+direction[i].s; if(a[xx][yy]=='T'||a[xx][yy]=='D'||a[xx][yy]=='H'){ continue; } if(check(xx,yy)&&viz[xx][yy]==0){ viz[xx][yy]=1; q.push(mp(xx,yy)); dbees[xx][yy]=dbees[x][y]+1; } } } ll l=0,r=n*n,ans=-1; //cout<<"DA"<<endl; while(l<=r){ ll mid=(l+r)/2; // cout<<mid<<endl; if(verif(mid)){ l=mid+1; ans=mid; }else { r=mid-1; } } cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...