提出 #48394120


ソースコード 拡げる

#include <bits/stdc++.h>
#include <atcoder/modint>

namespace {
    using ModInt [[maybe_unused]] = atcoder::modint998244353;
    using Num [[maybe_unused]] = long long int;
    using Vec [[maybe_unused]] = std::vector<Num>;
    using Set [[maybe_unused]] = std::set<Num>;
    using Mset [[maybe_unused]] = std::multiset<Num>;
    using Edges [[maybe_unused]] = std::vector<std::vector<Num>>;

    template<typename T>
    using Q [[maybe_unused]] = std::queue<T>;

    template<typename T>
    using PQ [[maybe_unused]] = std::priority_queue<T, std::vector<T>, std::greater<T>>;
}

Num ga[8][8];
Num gb[8][8];

void solve(std::istream& is, std::ostream& os) {
    Num h, w;
    is >> h >> w;

    std::map<Num, Num> ma;
    for(Num y{0}; y<h; ++y) {
        for(Num x{0}; x<w; ++x) {
            Num a;
            is >> a;
            ga[y][x] = a;
            ma[a] += 1;
        }
    }

    std::map<Num, Num> mb;
    for(Num y{0}; y<h; ++y) {
        for(Num x{0}; x<w; ++x) {
            Num b;
            is >> b;
            gb[y][x] = b;
            mb[b] += 1;
        }
    }

    for(const auto& [k,v] : ma) {
        if (mb[k] != v) {
            os << "-1\n";
            return;
        }
    }

    for(const auto& [k,v] : mb) {
        if (ma[k] != v) {
            os << "-1\n";
            return;
        }
    }

    Vec perm_y(h);
    std::iota(perm_y.begin(), perm_y.end(), 0LL);

    constexpr Num Inf = 1000000000000LL;
    Num answer {Inf};
    do {
        Vec perm_x(w);
        std::iota(perm_x.begin(), perm_x.end(), 0LL);
        do {
            bool matched {true};
            for(Num from_y{0}; from_y<h; ++from_y) {
                const auto to_y = perm_y.at(from_y);
                for(Num from_x{0}; from_x<w; ++from_x) {
                    const auto to_x = perm_x.at(from_x);
                    matched &= (ga[to_y][to_x] == gb[from_y][from_x]);
                }
            }

            if (matched) {
                Num cty {0};
                for(Num i{0}; i<h; ++i) {
                    for(Num j{i+1}; j<h; ++j) {
                        cty += perm_y.at(i) > perm_y.at(j);
                    }
                }

                Num ctx {0};
                for(Num i{0}; i<w; ++i) {
                    for(Num j{i+1}; j<w; ++j) {
                        ctx += perm_x.at(i) > perm_x.at(j);
                    }
                }

                answer = std::min(answer, ctx + cty);
            }
        } while(std::next_permutation(perm_x.begin(), perm_x.end()));
    } while(std::next_permutation(perm_y.begin(), perm_y.end()));

    answer = (answer == Inf) ? -1 : answer;
    os << answer << "\n";
}

int main(void) {
    solve(std::cin, std::cout);
    return 0;
}

提出情報

提出日時
問題 D - Swapping Puzzle
ユーザ zettsut
言語 C++ 20 (gcc 12.2)
得点 425
コード長 2840 Byte
結果 AC
実行時間 2 ms
メモリ 3692 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 425 / 425
結果
AC × 4
AC × 42
セット名 テストケース
Sample example0.txt, example1.txt, example2.txt, example3.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, example0.txt, example1.txt, example2.txt, example3.txt
ケース名 結果 実行時間 メモリ
000.txt AC 1 ms 3500 KiB
001.txt AC 1 ms 3548 KiB
002.txt AC 1 ms 3692 KiB
003.txt AC 1 ms 3620 KiB
004.txt AC 2 ms 3560 KiB
005.txt AC 1 ms 3488 KiB
006.txt AC 1 ms 3624 KiB
007.txt AC 1 ms 3484 KiB
008.txt AC 2 ms 3684 KiB
009.txt AC 1 ms 3684 KiB
010.txt AC 1 ms 3648 KiB
011.txt AC 1 ms 3556 KiB
012.txt AC 1 ms 3456 KiB
013.txt AC 1 ms 3656 KiB
014.txt AC 1 ms 3548 KiB
015.txt AC 1 ms 3488 KiB
016.txt AC 1 ms 3552 KiB
017.txt AC 1 ms 3564 KiB
018.txt AC 1 ms 3484 KiB
019.txt AC 1 ms 3556 KiB
020.txt AC 1 ms 3496 KiB
021.txt AC 1 ms 3544 KiB
022.txt AC 1 ms 3640 KiB
023.txt AC 1 ms 3556 KiB
024.txt AC 1 ms 3492 KiB
025.txt AC 1 ms 3484 KiB
026.txt AC 1 ms 3500 KiB
027.txt AC 1 ms 3556 KiB
028.txt AC 1 ms 3456 KiB
029.txt AC 1 ms 3536 KiB
030.txt AC 1 ms 3456 KiB
031.txt AC 1 ms 3564 KiB
032.txt AC 1 ms 3552 KiB
033.txt AC 1 ms 3500 KiB
034.txt AC 1 ms 3548 KiB
035.txt AC 1 ms 3552 KiB
036.txt AC 1 ms 3692 KiB
037.txt AC 1 ms 3556 KiB
example0.txt AC 1 ms 3556 KiB
example1.txt AC 1 ms 3644 KiB
example2.txt AC 1 ms 3620 KiB
example3.txt AC 1 ms 3548 KiB