This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)size(x)
int main(){
cin.tie(0)->sync_with_stdio(false);
int w, h, lenW, lenH, sx, sy, trash;
cin >> w >> h >> lenW >> lenH;
cin >> trash >> sy >> sx >> trash;
vector<string> grid(h);
for(int i = 0; i < h; i++) cin >> grid[i];
vector<vector<int>> nup(h, vector<int>(w)), ndown(h, vector<int>(w)), nleft(h, vector<int>(w)), nright(h, vector<int>(w));
for(int i = 0; i < h; i++){
for(int j = 0; j < w; j++){
if(grid[i][j] == 'X') nup[i][j] = i, nleft[i][j] = j;
else{
nup[i][j] = i > 0 ? nup[i-1][j] : -1;
nleft[i][j] = j > 0 ? nleft[i][j-1] : -1;
}
}
}
for(int i = h-1; i >= 0; i--){
for(int j = w-1; j >= 0; j--){
if(grid[i][j] == 'X') ndown[i][j] = i, nright[i][j] = j;
else{
ndown[i][j] = i < h-1 ? ndown[i+1][j] : h;
nright[i][j] = j < w-1 ? nright[i][j+1] : w;
}
}
}
queue<pair<int, int>> q;
q.emplace(sy, sx);
vector<vector<bool>> vis(h, vector<bool>(w));
vis[sy][sx] = true;
bool ans = false;
while(!q.empty()){
auto [i, j] = q.front(); q.pop();
if(grid[i][j] == '*') ans = true;
auto checkHor = [&](int a, int b){
int toR = min(nright[a][j], nright[b][j]);
int toL = max(nleft[a][j], nleft[b][j]);
return toR - toL - 1 >= lenW;
};
auto checkVer = [&](int a, int b){
int toD = min(ndown[i][a], ndown[i][b]);
int toU = max(nup[i][a], nup[i][b]);
return toD - toU - 1 >= lenH;
};
if(i > 0 && !vis[i-1][j] && grid[i-1][j] != 'X'){
if(checkHor(i, i-1)){
q.emplace(i-1, j);
vis[i-1][j] = true;
}
}
if(i < h-1 && !vis[i+1][j] && grid[i+1][j] != 'X'){
if(checkHor(i, i+1)){
q.emplace(i+1, j);
vis[i+1][j] = true;
}
}
if(j > 0 && !vis[i][j-1] && grid[i][j-1] != 'X'){
if(checkVer(j, j-1)){
q.emplace(i, j-1);
vis[i][j-1] = true;
}
}
if(j < w-1 && !vis[i][j+1] && grid[i][j+1] != 'X'){
if(checkVer(j, j+1)){
q.emplace(i, j+1);
vis[i][j+1] = true;
}
}
}
if(ans) cout << "YES\n";
else cout << "NO\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |