結果
| 問題 |
No.1638 Robot Maze
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-09-23 09:59:46 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 2,000 ms |
| コード長 | 1,119 bytes |
| コンパイル時間 | 1,555 ms |
| コンパイル使用メモリ | 174,696 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-05 09:24:34 |
| 合計ジャッジ時間 | 3,197 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 49 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int h, w;
long long k, p, xs, ys, xt, yt;
int d[4], dx[4] = { -1, 1, 0, 0 }, dy[4] = { 0, 0, 1, -1 };
string s[100];
typedef pair<long long, pair<int, int>> P;
priority_queue<P, vector<P>, greater<P>> Q;
bool f;
int main()
{
cin >> h >> w >> d[0] >> d[1] >> d[2] >> d[3] >> k >> p >> xs >> ys >> xt >> yt;
for (int i = 0; i < h; i++)
cin >> s[i];
xs--;
ys--;
xt--;
yt--;
Q.push({ 0, {xs, ys} });
while (!Q.empty()) {
long long c = Q.top().first, z;
int xn = Q.top().second.first,
yn = Q.top().second.second;
Q.pop();
for (int i = 0; i < 4; i++) {
if ((i == 0 && xn > 0) || (i == 1 && xn < h - 1) ||
(i == 2 && yn < w - 1) || (i == 3 && yn > 0)) {
int xk = xn + dx[i], yk = yn + dy[i];
if (s[xk][yk] != '#') {
z = d[i];
if (s[xk][yk] == '@')
z += p;
if (c + z <= k) {
if (xk == xt && yk == yt) {
f = 1;
break;
}
s[xk][yk] = '#';
Q.push({ c + z, {xk, yk} });
}
}
}
}
if (f)
break;
}
if(f)
cout << "Yes" << endl;
else
cout << "No" << endl;
}