提出 #53420373


ソースコード 拡げる

#include <bits/stdc++.h>
#include <queue>
#define ll long long
#define ull unsigned long long
#define pa first
#define pb second
#define endl '\n'
#define vint vector<int>
#define vlong vector<ll>
#define pii pair<int, int>
#define rep(i, a, b) for (int i = int(a); i < int(b); i++)
#define rng(i, a, b) for (int i = int(a); i <= int(b); i++)
#define per(i, a, b) for (int i = int(b - 1); i >= int(a); i--)
#define gnr(i, a, b) for (int i = int(b); i >= int(a); i--)
using namespace std;
#define ATC
#ifdef ATC
#include <atcoder/all>
using namespace atcoder;
#endif

#ifdef MT
void solve()
{
}
#endif

const int N = 510, INF = 0x3f3f3f3f;
char mp[N][N];
int n;

struct Vec {
    int i, j;
    Vec operator+(const Vec& rhs) const
    {
        return { i + rhs.i, j + rhs.j };
    }
} dir[4] = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };

bool isvaild(int i, int j)
{
    return i && j && i <= n && j <= n;
}

bool isvaild(Vec& v)
{
    return isvaild(v.i, v.j);
}

struct Route {
    Vec pos;
    int w;
    bool operator<(const Route& rhs) const
    {
        return w > rhs.w;
    }
};
#define cast(arr, vec) arr[(vec.i)][(vec.j)]
int dijkstra(Vec s, Vec t, char c)
{
    vector<vint> dp(n + 1, vint(n + 1, INF));
    priority_queue<Route> pq;
    cast(dp, s) = 0;
    pq.push({ s, 0 });
    while (!pq.empty()) {
        auto top = pq.top();
        pq.pop();
        for (auto d : dir) {
            Vec cur = top.pos + d;
            if (isvaild(cur) && cast(dp, cur) > top.w + (c != cast(mp, cur))) {
                cast(dp, cur) = top.w + (c != cast(mp, cur));
                pq.push({ cur, cast(dp, cur) });
            }
        }
    }
    return cast(dp, t);
}

int main(void)
{
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    rng(i, 1, n)
    {
        rng(j, 1, n)
        {
            cin >> mp[i][j];
        }
    }
    cout << dijkstra({ 1, 1 }, { n, n }, 'R') + dijkstra({ 1, n }, { n, 1 }, 'B');

#ifdef MT
    int t;
    cin >> t;
    for (int i = 0; i < t; i++)
        solve();
#endif
}

提出情報

提出日時
問題 C - Routing
ユーザ L1bra
言語 C++ 20 (gcc 12.2)
得点 500
コード長 2153 Byte
結果 AC
実行時間 42 ms
メモリ 6072 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 4
AC × 40
セット名 テストケース
Sample sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt
All 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, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt
ケース名 結果 実行時間 メモリ
in01.txt AC 1 ms 3444 KiB
in02.txt AC 1 ms 3456 KiB
in03.txt AC 1 ms 3560 KiB
in04.txt AC 2 ms 3620 KiB
in05.txt AC 6 ms 3772 KiB
in06.txt AC 32 ms 5992 KiB
in07.txt AC 35 ms 5992 KiB
in08.txt AC 37 ms 5992 KiB
in09.txt AC 42 ms 5988 KiB
in10.txt AC 38 ms 4648 KiB
in11.txt AC 42 ms 6004 KiB
in12.txt AC 37 ms 5292 KiB
in13.txt AC 34 ms 5912 KiB
in14.txt AC 31 ms 6044 KiB
in15.txt AC 31 ms 4532 KiB
in16.txt AC 31 ms 4368 KiB
in17.txt AC 32 ms 4504 KiB
in18.txt AC 32 ms 4556 KiB
in19.txt AC 31 ms 5256 KiB
in20.txt AC 33 ms 5280 KiB
in21.txt AC 30 ms 5248 KiB
in22.txt AC 32 ms 5284 KiB
in23.txt AC 34 ms 5968 KiB
in24.txt AC 35 ms 5992 KiB
in25.txt AC 33 ms 6016 KiB
in26.txt AC 35 ms 5972 KiB
in27.txt AC 34 ms 6028 KiB
in28.txt AC 35 ms 6072 KiB
in29.txt AC 34 ms 5972 KiB
in30.txt AC 35 ms 5996 KiB
in31.txt AC 24 ms 4440 KiB
in32.txt AC 27 ms 4480 KiB
in33.txt AC 28 ms 4296 KiB
in34.txt AC 27 ms 4392 KiB
in35.txt AC 34 ms 5332 KiB
in36.txt AC 34 ms 5424 KiB
sample-01.txt AC 1 ms 3508 KiB
sample-02.txt AC 1 ms 3336 KiB
sample-03.txt AC 1 ms 3556 KiB
sample-04.txt AC 1 ms 3440 KiB