Submission #1231880

#TimeUsernameProblemLanguageResultExecution timeMemory
1231880PVM_pvmToy (CEOI24_toy)C++20
100 / 100
290 ms216344 KiB
#include<bits/stdc++.h> using namespace std; #define MAXN 1507 int ww,h,k,l; int xh,yh,xv,yv; int xg,yg; int xs,ys; bool bl[MAXN][MAXN]; int lf[MAXN][MAXN],rt[MAXN][MAXN]; int up[MAXN][MAXN],dw[MAXN][MAXN]; bool b[MAXN][MAXN]; pair<int,int> dl[4]={ {1,0} , {-1,0} , {0,-1} , {0,1} }; void dfs(int x, int y) { b[x][y]=1; for (int dd=0;dd<4;dd++) { int nx=x+dl[dd].first; int ny=y+dl[dd].second; if (nx<0 || nx>=h) continue; if (ny<0 || ny>=ww) continue; if (bl[nx][ny]) continue; if (b[nx][ny]) continue; int dlred=rt[nx][ny]-lf[nx][ny]+1; if (dlred<k) continue; int dlkol=dw[nx][ny]-up[nx][ny]+1; if (dlkol<l) continue; int ort=min(rt[nx][ny],rt[x][y]); int olf=max(lf[nx][ny],lf[x][y]); int oup=max(up[nx][ny],up[x][y]); int odw=min(dw[nx][ny],dw[x][y]); int odlkol=odw-oup+1; int odlred=ort-olf+1; if (odlred<k) continue; if (odlkol<l) continue; dfs(nx,ny); } } int main() { cin>>ww>>h>>k>>l; cin>>xh>>yh>>xv>>yv; for (int q=0;q<h;q++) { string s; cin>>s; for (int w=0;w<ww;w++) { if (s[w]=='X') bl[q][w]=1; else { bl[q][w]=0; if (s[w]=='*') { xg=w; yg=q; } } } } xs=xv; ys=yh; for (int q=0;q<h;q++) { if (bl[q][0]) lf[q][0]=0; else lf[q][0]=-1; for (int w=1;w<ww;w++) { if (bl[q][w]) lf[q][w]=w; else lf[q][w]=lf[q][w-1]; } if (bl[q][ww-1]) rt[q][ww-1]=ww-1; else rt[q][ww-1]=ww; for (int w=ww-2;w>=0;w--) { if (bl[q][w]) rt[q][w]=w; else rt[q][w]=rt[q][w+1]; } } for (int w=0;w<ww;w++) { if (bl[0][w]) up[0][w]=0; else up[0][w]=-1; for (int q=1;q<h;q++) { if (bl[q][w]) up[q][w]=q; else up[q][w]=up[q-1][w]; } if (bl[h-1][w]) dw[h-1][w]=h-1; else dw[h-1][w]=h; for (int q=h-2;q>=0;q--) { if (bl[q][w]) dw[q][w]=q; else dw[q][w]=dw[q+1][w]; } } for (int q=0;q<h;q++) { for (int w=0;w<ww;w++) { lf[q][w]++; rt[q][w]--; up[q][w]++; dw[q][w]--; } } dfs(ys,xs); if (b[yg][xg]) { cout<<"YES\n"; } else cout<<"NO\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...