結果
| 問題 | No.3599 Queen Moving Query |
| コンテスト | |
| ユーザー |
kwm_t
|
| 提出日時 | 2026-07-26 12:46:05 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.90.0) |
| 結果 |
AC
|
| 実行時間 | 377 ms / 5,000 ms |
| + 396µs | |
| コード長 | 2,144 bytes |
| 記録 | |
| コンパイル時間 | 2,359 ms |
| コンパイル使用メモリ | 352,960 KB |
| 実行使用メモリ | 82,176 KB |
| 最終ジャッジ日時 | 2026-07-26 12:46:16 |
| 合計ジャッジ時間 | 10,528 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 26 |
ソースコード
#include <bits/stdc++.h>
//#include <atcoder/all>
using namespace std;
// using namespace atcoder;
// using mint = modint1000000007;
// const int mod = 1000000007;
// using mint = modint998244353;
// const int mod = 998244353;
const int INF = 1e9;
// const long long LINF = 1e18;
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define rep2(i, l, r) for (int i = (l); i < (r); ++i)
#define rrep(i, n) for (int i = (n)-1; i >= 0; --i)
#define rrep2(i, l, r) for (int i = (r)-1; i >= (l); --i)
#define all(x) (x).begin(), (x).end()
#define allR(x) (x).rbegin(), (x).rend()
#define P pair<int, int>
template<typename A, typename B> inline bool chmax(A& a, const B& b) { if (a < b) { a = b; return true; } return false; }
template<typename A, typename B> inline bool chmin(A& a, const B& b) { if (a > b) { a = b; return true; } return false; }
const int dx8[8] = { 1,0,-1,0,1,1,-1,-1 };
const int dy8[8] = { 0,-1,0,1,1,-1,1,-1 };
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int h, w; cin >> h >> w;
int sx, sy; cin >> sx >> sy;
sx--, sy--;
vector<string>s(h);
rep(i, h)cin >> s[i];
vector dp(h, vector(w, vector(9, vector<int>(2, INF))));
deque<array<int, 4>>dq;
dp[sx][sy][8][0] = 0;
dq.push_back({ sx,sy,8,0 });
while (!dq.empty()) {
auto [x, y, t, m] = dq.front();
dq.pop_front();
rep(nt, 8) {
int nx = x + dx8[nt];
int ny = y + dy8[nt];
if (nx < 0 || nx >= h)continue;
if (ny < 0 || ny >= w)continue;
if (s[nx][ny] == '#')continue;
int val = dp[x][y][t][m] + ((t == nt) ? 0 : 1);
int nm = val % 2;
if (t == nt) {
if (chmin(dp[nx][ny][nt][nm], val)) {
dq.push_front({ nx,ny,nt,nm });
}
if (chmin(dp[nx][ny][nt][nm ^ 1], val + 1)) {
dq.push_back({ nx,ny,nt,nm ^ 1 });
}
}
else {
if (chmin(dp[nx][ny][nt][nm], val)) {
dq.push_back({ nx,ny,nt,nm });
}
}
}
}
int q; cin >> q;
while (q--) {
int gx, gy, t; cin >> gx >> gy >> t;
gx--, gy--;
bool chk = false;
rep(i, 8) {
auto d = dp[gx][gy][i][t % 2];
if (d == INF)continue;
if (d <= t)chk = true;
}
cout << (chk ? "Yes" : "No") << endl;
}
return 0;
}
kwm_t