제출 #1232070

#제출 시각아이디문제언어결과실행 시간메모리
1232070jaskierToy (CEOI24_toy)C++20
0 / 100
10 ms13128 KiB
#include<bits/stdc++.h> using namespace std; const int maxn=1509; int tab[maxn][maxn], szerokosc, wysokosc, kraw[maxn][maxn][5], w, k, lewo[maxn][maxn], prawo[maxn][maxn], gora[maxn][maxn], dol[maxn][maxn]; bool odw[maxn][maxn]; vector<pair<int, int>> ruza={{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; void stworz(int a, int b) { int l, p, L, P, g, d, G, D; if(a!=1) { l=lewo[a][b]; p=prawo[a][b]; L=lewo[a-1][b]; P=prawo[a-1][b]; if(min(p, P)-max(l, L)-1 >= szerokosc){ kraw[a][b][0]=1; } } if(a!=w) { l=lewo[a][b]; p=prawo[a][b]; L=lewo[a+1][b]; P=prawo[a+1][b]; if(min(p, P)-max(l, L)-1 >= szerokosc){ kraw[a][b][1]=1; } } if(b!=1) { d=dol[a][b]; g=gora[a][b]; D=dol[a][b-1]; G=gora[a][b-1]; if(min(d, D)-max(g, G)-1 >= wysokosc) { kraw[a][b][2]=1; } } if(b!=k) { d=dol[a][b]; g=gora[a][b]; D=dol[a][b+1]; G=gora[a][b+1]; if(min(d, D)-max(g, G)-1 >= wysokosc) { kraw[a][b][3]=1; } } } void DFS(int a, int b) { odw[a][b]=1; int na, nb; for(int i=0; i<4; i++) { if(kraw[a][b][i]==0) { continue; } na=a+ruza[i].first; nb=b+ruza[i].second; if(!odw[na][nb]) { DFS(na, nb); } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int a, b, c, d, finalnyx, finalnyy; cin >> k >> w >> szerokosc >> wysokosc; cin >> b >> a; cin >> d >> c; b++; a++; d++; c++; char x; for(int i=1; i<=w; i++) { for(int j=1; j<=k; j++) { cin >> x; if(x=='X') { tab[i][j]=1; } else if(x=='*') { finalnyx=i; finalnyy=j; } } } int ziomo; for(int i=1; i<=w; i++) { prawo[i][k+1]=k+1; for(int j=1; j<=k; j++) { ziomo=k-j+1; lewo[i][j]=lewo[i][j-1]; prawo[i][ziomo]=prawo[i][ziomo+1]; if(tab[i][j]==1) { lewo[i][j]=j; } if(tab[i][ziomo]==1) { prawo[i][ziomo]=ziomo; } } } for(int j=1; j<=k; j++) { dol[w+1][j]=w+1; for(int i=1; i<=w; i++) { ziomo=w-i+1; gora[i][j]=gora[i-1][j]; dol[ziomo][j]=dol[ziomo+1][j]; if(tab[i][j]==1) { gora[i][j]=i; } if(tab[ziomo][j]==1) { gora[ziomo][j]=ziomo; } } } for(int i=1; i<=w; i++) { for(int j=1; j<=k; j++) { stworz(i, j); // cout << "DLA: " << i << ' ' << j << " : " << kraw[i][j][0] << ' ' << kraw[i][j][1] << ' ' << kraw[i][j][2] << ' ' << kraw[i][j][3] << endl; } } DFS(a, d); if(odw[finalnyx][finalnyy]) { cout << "YES" << endl; } else { cout << "NO"; } } /* 4 3 3 2 0 1 0 0 .X.* .... ...X */
#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...