提出 #73588401
ソースコード 拡げる
#include <bits/stdc++.h>
#include <atcoder/all>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace atcoder;
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
#define ALL(a) (a).begin(), (a).end()
#define rep(i, n) for (ll i = 0; i < (n); ++i)
#define rrep(i, n) for (ll i = (n) - 1; i >= 0; --i)
#define rep_2(i, j, n) for (ll i = 0; i < (n); ++i) for (ll j = i + 1; j < (n); ++j)
#define foreach(i, n) for (auto& i : (n))
#define chmax(a, b) a = max(a, b)
#define chmin(a, b) a = min(a, b)
#define popcount __builtin_popcountll
#define bitcheck(mask, j) ((mask) & (1LL << (j)))
using mint = modint998244353;
using mint1 = modint1000000007;
template <typename K, typename V>
using umap = std::unordered_map<K, V>;
template <typename K>
using uset = std::unordered_set<K>;
// 参考元 : https://qiita.com/ganyariya/items/df35d253726269bda436
struct HashPair {
//注意 constがいる
template<class T1, class T2>
size_t operator()(const pair<T1, T2> &p) const {
//first分をハッシュ化する
auto hash1 = hash<T1>{}(p.first);
//second分をハッシュ化する
auto hash2 = hash<T2>{}(p.second);
//重複しないようにハッシュ処理
size_t seed = 0;
seed ^= hash1 + 0x9e3779b9 + (seed << 6) + (seed >> 2);
seed ^= hash2 + 0x9e3779b9 + (seed << 6) + (seed >> 2);
return seed;
}
};
template <typename X, typename Y>
using pair_map = unordered_map<X, Y, HashPair>;
template <typename X, typename Y>
using pair_set = unordered_set<pair<X, Y>, HashPair>;
// [left, right) の範囲で f(mid) が true になる最小の left を返す
// 単調性: false...false,true...true
template<class F, class T>
T binary_search_min_left(T left, T right, F f){
while (right - left > 1){
T mid = left + (right - left) / 2;
if(f(mid)) right = mid;
else left = mid;
}
return right;
}
// [left, right) の範囲で f(mid) が true になる最大の right-1 を返す
// 単調性: true...true,false...false
template<class F, class T>
T binary_search_max_right(T left, T right, F f){
while (right - left > 1){
T mid = left + (right - left) / 2;
if(f(mid)) left = mid;
else right = mid;
}
return left;
}
template <typename T>
using v = vector<T>;
template <typename T>
using vv = v<v<T>>;
template <typename T>
using vvv = vv<v<T>>;
template <typename T, typename U>
using P = pair<T, U>;
using grid = vector<vector<char>>;
using graph = vector<vector<int>>;
using vi = vector<int>; using vvi = vector<vector<int>>; using vvvi = vector<vector<vector<int>>>;
using vl = vector<ll>; using vvl = vector<vector<ll>>; using vvvl = vector<vector<vector<ll>>>;
using vm = vector<mint>; using vvm = vector<vector<mint>>; using vvvm = vector<vector<vector<mint>>>;
using vm1 = vector<mint1>; using vvm1 = vector<vector<mint1>>; using vvvm1 = vector<vector<vector<mint1>>>;
using vld = vector<ld>; using vvld = vector<vector<ld>>; using vvvld = vector<vector<vector<ld>>>;
using vb = vector<bool>; using vvb = vector<vector<bool>>; using vvvb = vector<vector<vector<bool>>>;
using vs = vector<string>; using vvs = vector<vector<string>>;
ll inf = 4e18;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n, m;
cin >> n >> m;
vs s(n);
rep(i, n) cin >> s[i];
vvl dist(n, vl(m, inf));
dist[0][0] = 0;
deque<P<ll, ll>> q;
q.push_back({0, 0});
ll H = n; // 縦
ll W = m; // 横
auto isOut = [&](ll i, ll j) {
return i < 0 || j < 0 || i >= H || j >= W;
};
ll dx[] = {1, -1, 0, 0};
ll dy[] = {0, 0, 1, -1};
while (!q.empty()) {
auto [i, j] = q.front();
q.pop_front();
rep(k, 4) {
ll ni = i + dx[k];
ll nj = j + dy[k];
if (isOut(ni, nj)) continue;
ll cost = dist[i][j];
if (s[ni][nj] == '#') cost++;
if (dist[ni][nj] > cost) {
dist[ni][nj] = cost;
if (s[ni][nj] == '#') q.push_back({ni, nj});
else q.push_front({ni, nj});
}
}
}
cout << dist[n - 1][m - 1] << endl;
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
D - 迷路からの脱出 |
| ユーザ |
yesantikiss |
| 言語 |
C++23 (GCC 15.2.0) |
| 得点 |
400 |
| コード長 |
4479 Byte |
| 結果 |
AC |
| 実行時間 |
15 ms |
| メモリ |
7992 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
400 / 400 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample01.txt, sample02.txt, sample03.txt, sample04.txt, sample05.txt, sample06.txt, sample07.txt, sample08.txt, sample09.txt, sample10.txt |
| All |
sample01.txt, sample02.txt, sample03.txt, sample04.txt, sample05.txt, sample06.txt, sample07.txt, sample08.txt, sample09.txt, sample10.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in40.txt, in41.txt, in42.txt, in43.txt, in44.txt, in45.txt, in46.txt, in47.txt, in48.txt, in49.txt, in50.txt, in51.txt, in52.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| in01.txt |
AC |
2 ms |
3640 KiB |
| in02.txt |
AC |
1 ms |
3456 KiB |
| in03.txt |
AC |
1 ms |
3588 KiB |
| in04.txt |
AC |
1 ms |
3604 KiB |
| in05.txt |
AC |
1 ms |
3808 KiB |
| in06.txt |
AC |
13 ms |
7840 KiB |
| in07.txt |
AC |
11 ms |
5928 KiB |
| in08.txt |
AC |
12 ms |
5860 KiB |
| in09.txt |
AC |
12 ms |
6616 KiB |
| in10.txt |
AC |
14 ms |
6004 KiB |
| in11.txt |
AC |
14 ms |
6848 KiB |
| in12.txt |
AC |
14 ms |
5872 KiB |
| in13.txt |
AC |
12 ms |
7584 KiB |
| in14.txt |
AC |
13 ms |
5880 KiB |
| in15.txt |
AC |
1 ms |
3624 KiB |
| in16.txt |
AC |
1 ms |
3808 KiB |
| in17.txt |
AC |
11 ms |
5760 KiB |
| in18.txt |
AC |
14 ms |
6012 KiB |
| in19.txt |
AC |
12 ms |
5984 KiB |
| in20.txt |
AC |
13 ms |
7992 KiB |
| in21.txt |
AC |
12 ms |
5764 KiB |
| in22.txt |
AC |
14 ms |
5884 KiB |
| in23.txt |
AC |
13 ms |
5880 KiB |
| in24.txt |
AC |
12 ms |
7408 KiB |
| in25.txt |
AC |
7 ms |
5524 KiB |
| in26.txt |
AC |
1 ms |
3576 KiB |
| in27.txt |
AC |
1 ms |
3568 KiB |
| in28.txt |
AC |
12 ms |
5928 KiB |
| in29.txt |
AC |
1 ms |
3560 KiB |
| in30.txt |
AC |
1 ms |
3564 KiB |
| in31.txt |
AC |
11 ms |
5792 KiB |
| in32.txt |
AC |
12 ms |
7840 KiB |
| in33.txt |
AC |
1 ms |
3680 KiB |
| in34.txt |
AC |
12 ms |
5872 KiB |
| in35.txt |
AC |
13 ms |
7832 KiB |
| in36.txt |
AC |
15 ms |
6612 KiB |
| in37.txt |
AC |
12 ms |
5868 KiB |
| in38.txt |
AC |
1 ms |
3552 KiB |
| in39.txt |
AC |
1 ms |
3684 KiB |
| in40.txt |
AC |
13 ms |
5984 KiB |
| in41.txt |
AC |
14 ms |
5876 KiB |
| in42.txt |
AC |
9 ms |
5124 KiB |
| in43.txt |
AC |
14 ms |
5988 KiB |
| in44.txt |
AC |
14 ms |
5760 KiB |
| in45.txt |
AC |
14 ms |
5880 KiB |
| in46.txt |
AC |
11 ms |
6136 KiB |
| in47.txt |
AC |
1 ms |
3580 KiB |
| in48.txt |
AC |
1 ms |
3676 KiB |
| in49.txt |
AC |
11 ms |
5928 KiB |
| in50.txt |
AC |
11 ms |
5984 KiB |
| in51.txt |
AC |
12 ms |
5932 KiB |
| in52.txt |
AC |
12 ms |
5828 KiB |
| sample01.txt |
AC |
1 ms |
3456 KiB |
| sample02.txt |
AC |
1 ms |
3556 KiB |
| sample03.txt |
AC |
1 ms |
3580 KiB |
| sample04.txt |
AC |
1 ms |
3456 KiB |
| sample05.txt |
AC |
1 ms |
3624 KiB |
| sample06.txt |
AC |
1 ms |
3536 KiB |
| sample07.txt |
AC |
1 ms |
3580 KiB |
| sample08.txt |
AC |
1 ms |
3564 KiB |
| sample09.txt |
AC |
1 ms |
3628 KiB |
| sample10.txt |
AC |
1 ms |
3608 KiB |