結果
| 問題 |
No.1638 Robot Maze
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-08-06 21:46:57 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,735 bytes |
| コンパイル時間 | 2,210 ms |
| コンパイル使用メモリ | 209,988 KB |
| 最終ジャッジ日時 | 2025-01-23 15:00:14 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 41 WA * 8 |
ソースコード
#include <bits/stdc++.h>
using ll = long long;
using std::cin;
using std::cout;
using std::endl;
std::mt19937 rnd(std::chrono::steady_clock::now().time_since_epoch().count());
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
const int inf = (int)1e9 + 7;
const long long INF = 1LL << 60;
void solve()
{
int H, W; cin >> H >> W;
ll c[4]; cin >> c[0] >> c[1] >> c[2] >> c[3];
ll K, P; cin >> K >> P;
const int dh[] = {-1, 1, 0, 0};
const int dw[] = {0, 0, 1, -1};
int sh, sw, eh, ew;
cin >> sh >> sw >> eh >> ew;
sh -= 1, sw -= 1, eh -= 1, ew -= 1;
std::vector<std::string> vs(H);
for (int i = 0; i < H; ++i)
{
cin >> vs[i];
}
using T = std::tuple<ll, int, int>;
std::priority_queue<T, std::vector<T>, std::greater<>> pq;
std::vector d(H, std::vector<ll>(W, INF));
d[sh][sw] = 0;
pq.emplace(0, sh, sw);
while(not pq.empty())
{
const auto &[dist, h, w] = pq.top();
pq.pop();
if(dist > d[h][w])
continue;
for (int i = 0; i < 4; ++i)
{
const int nh = h + dh[i];
const int nw = w + dw[i];
if(nh < 0 or nh >= H or nw < 0 or nw >= W)
continue;
if(vs[nh][nw] == '#')
continue;
ll add = c[i];
if(vs[nh][nw] == '@')
add += P;
if(chmin(d[nh][nw], dist + add))
{
pq.emplace(d[nh][nw], nh, nw);
}
}
}
if(d[eh][ew] > K)
{
cout << "No" << "\n";
}
else
{
cout << "Yes" << "\n";
}
}
int main()
{
std::cin.tie(nullptr);
std::ios::sync_with_stdio(false);
int kkt = 1;
// cin >> kkt;
while(kkt--)
solve();
return 0;
}