結果
| 問題 |
No.2646 Cycle Maze
|
| ユーザー |
|
| 提出日時 | 2024-02-25 19:47:02 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 450 ms / 2,500 ms |
| コード長 | 1,352 bytes |
| コンパイル時間 | 2,491 ms |
| コンパイル使用メモリ | 211,892 KB |
| 最終ジャッジ日時 | 2025-02-19 21:21:53 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 51 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
template<class T> istream& operator >> (istream& is, vector<T>& vec) {
for(T& x : vec) is >> x;
return is;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int H, W, T, sy, sx, gy, gx, prv = -1;
cin >> H >> W >> T >> sy >> sx >> gy >> gx;
sy--, sx--, gy--, gx--;
vector<string> A(H), B;
cin >> A;
B = A;
vector dp(T, vector(H, vector<bool>(W)));
queue<tuple<int,int,int>> que;
dp[0][sy][sx] = true;
que.emplace(0, sy, sx);
while(!que.empty()){
auto [t, y, x] = que.front();
que.pop();
if(t > prv){
prv = t;
for(int y = 0; y < H; y++){
for(int x = 0; x < W; x++){
if(B[y][x] == '0') B[y][x] = A[y][x];
else B[y][x]--;
}
}
}
if(y == gy && x == gx){
cout << "Yes\n";
return 0;
}
if(t + 1 >= T) continue;
for(int i = 0; i < 5; i++){
int ny = y + (i == 0) - (i == 1);
int nx = x + (i == 2) - (i == 3);
if(ny < 0 || nx < 0 || ny >= H || nx >= W || B[ny][nx] == '0' || dp[t + 1][ny][nx]) continue;
dp[t + 1][ny][nx] = true;
que.emplace(t + 1, ny, nx);
}
}
cout << "No\n";
}