제출 #1175791

#제출 시각아이디문제언어결과실행 시간메모리
1175791akuygaMecho (IOI09_mecho)C++20
1 / 100
290 ms131072 KiB
#include "bits/stdc++.h" using namespace std; #define ii pair<ll,ll> #define f first #define s second #define mp make_pair #define ll long long vector<ii> ways={mp(0,1),mp(1,0),mp(0,-1),mp(-1,0)}; int main(){ int N,S; cin>>N>>S; vector<vector<bool>> b(N,vector<bool>(N,1)); vector<vector<int>> A(N,vector<int>(N,-1)); queue<ii> QB; int px,py,gx,gy; string s; for(int i=0;i<N;i++){ cin>>s; for(int j=0;j<N;j++){ if(s[j]=='T')b[i][j]=0; else if(s[j]=='H'){b[i][j]=0; QB.push(mp(i,j));} else if(s[j]=='M'){px=i; py=j;} else if(s[j]=='D'){gx=i; gy=j;} } } queue<pair<ii,ii>> Q; Q.push(mp(mp(S,0),mp(px,py))); //f.f is step left //f.s is t baby; A[px][py]=1; int T=0; while(!Q.empty()){ int t=Q.front().f.s; int step=Q.front().f.f; ii curr=Q.front().s; //cout<<curr.f<<' '<<curr.s<<'\n'; Q.pop(); if(curr.f==gx&&curr.s==gy)continue; if(t>T){ T=t; queue<ii> temp; while(!QB.empty()){ ii bq=QB.front(); QB.pop(); for(auto i:ways) if(bq.f+i.f>=0&&bq.f+i.f<N&&bq.s+i.s>=0&&bq.s+i.s<N&&b[bq.f+i.f][bq.s+i.s]){ temp.push(mp(bq.f+i.f,bq.s+i.s)); b[bq.f+i.f][bq.s+i.s]=0; } } QB=temp; } if(step==0){step=S; t++;} for(auto i:ways) if(curr.f+i.f>=0&&curr.f+i.f<N&&curr.s+i.s>=0&&curr.s+i.s<N&&b[curr.f+i.f][curr.s+i.s]){ A[curr.f+i.f][curr.s+i.s]=A[curr.f][curr.s]; Q.push(mp(mp(step-1,t),mp(curr.f+i.f,curr.s+i.s))); } if(b[px][py]){A[px][py]++; Q.push(mp(mp(S,t+1),mp(px,py)));} } // for(int i=0;i<N;i++){ // for(int j=0;j<N;j++)cout<<A[i][j]<<' '; // cout<<'\n'; // } cout<<A[gx][gy]; }
#Verdict Execution timeMemoryGrader output
Fetching results...