Submission #57799684


Source Code Expand

#include <bits/stdc++.h>
#include <atcoder/modint>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/integer/common_factor_ct.hpp>

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>>;
    using BigInt = boost::multiprecision::cpp_int;

    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>>;

    const std::vector<std::pair<Num, Num>> dyxs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
    std::map<char, std::pair<Num, Num>> directions {{'D', {1, 0}}, {'U', {-1, 0}}, {'R', {0, 1}}, {'L', {0, -1}}};

    template<typename T>
    void print_oneline(const std::vector<T>& vec, std::ostream& os) {
        const auto size = vec.size();
        for(size_t i{0}; i<size; ++i) {
            os << vec.at(i) << (((i+1) == size) ? '\n' : ' ');
        }
    }

    template<typename T>
    void print_each(const std::vector<T>& vec, std::ostream& os) {
        const auto size = vec.size();
        for(size_t i{0}; i<size; ++i) {
            os << vec.at(i) << '\n';
        }
    }
}

void solve(std::istream& is, std::ostream& os) {
    Num n {0};
    is >> n;

    Vec ps(n);
    for(auto&& x : ps) {
        is >> x;
        --x;
    }

    Vec ns(n);
    for(auto&& x : ns) {
        is >> x;
        --x;
    }

    BigInt period = 1;
    BigInt rem = 0;
    auto result = ns;
    std::vector<bool> seen(n);

    for(Num i{0}; i<n; ++i) {
        if (seen.at(i)) {
            continue;
        }

        Vec cycle;
        const Num init = i;
        Num current = init;
        for(;;) {
            cycle.push_back(current);
            seen.at(current) = true;
            Num next = ps.at(current);
            if (next == init) {
                break;
            }
            current = next;
        }

        const Num size = static_cast<Num>(cycle.size());
        const BigInt n_choose = size / boost::math::gcd(size, period);

        Vec vs;
        for(Num j{0}; j<n_choose; ++j) {
            const Num p = static_cast<Num>((rem + j * period) % size);
            vs.push_back(ns.at(cycle.at(p)));
        }

        const auto offset = std::ranges::min_element(vs) - vs.begin();
        rem += offset * period;
        period *= n_choose;

        for(Num j{0}; j<size; ++j) {
            const Num p = static_cast<Num>((j + rem) % size);
            result[cycle.at(j)] = ns.at(cycle.at(p));
        }
    }

    for(Num i{0}; i<n; ++i) {
        os << result.at(i) + 1 << (((i+1)==n) ? '\n' : ' ');
    }
}

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

Submission Info

Submission Time
Task G - Lexicographically Smallest Permutation
User zettsut
Language C++ 20 (gcc 12.2)
Score 575
Code Size 3022 Byte
Status AC
Exec Time 148 ms
Memory 12680 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 575 / 575
Status
AC × 3
AC × 91
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 01_random_33.txt, 01_random_34.txt, 01_random_35.txt, 01_random_36.txt, 01_random_37.txt, 01_random_38.txt, 01_random_39.txt, 01_random_40.txt, 01_random_41.txt, 01_random_42.txt, 01_random_43.txt, 01_random_44.txt, 01_random_45.txt, 01_random_46.txt, 01_random_47.txt, 01_random_48.txt, 01_random_49.txt, 01_random_50.txt, 01_random_51.txt, 01_random_52.txt, 01_random_53.txt, 01_random_54.txt, 01_random_55.txt, 01_random_56.txt, 01_random_57.txt, 01_random_58.txt, 01_random_59.txt, 01_random_60.txt, 01_random_61.txt, 01_random_62.txt, 01_random_63.txt, 01_random_64.txt, 01_random_65.txt, 01_random_66.txt, 01_random_67.txt, 01_random_68.txt, 01_random_69.txt, 01_random_70.txt, 01_random_71.txt, 01_random_72.txt, 01_random_73.txt, 01_random_74.txt, 01_random_75.txt, 01_random_76.txt, 01_random_77.txt, 01_random_78.txt, 01_random_79.txt, 02_small_80.txt, 02_small_81.txt, 02_small_82.txt, 02_small_83.txt, 02_small_84.txt, 02_small_85.txt, 02_small_86.txt, 02_small_87.txt, 02_small_88.txt, 02_small_89.txt, 02_small_90.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3604 KiB
00_sample_01.txt AC 1 ms 3556 KiB
00_sample_02.txt AC 1 ms 3560 KiB
01_random_03.txt AC 90 ms 9520 KiB
01_random_04.txt AC 92 ms 12392 KiB
01_random_05.txt AC 87 ms 8992 KiB
01_random_06.txt AC 90 ms 10308 KiB
01_random_07.txt AC 93 ms 12212 KiB
01_random_08.txt AC 93 ms 12680 KiB
01_random_09.txt AC 91 ms 10560 KiB
01_random_10.txt AC 91 ms 10296 KiB
01_random_11.txt AC 29 ms 5480 KiB
01_random_12.txt AC 53 ms 7292 KiB
01_random_13.txt AC 26 ms 5648 KiB
01_random_14.txt AC 2 ms 3676 KiB
01_random_15.txt AC 70 ms 9528 KiB
01_random_16.txt AC 42 ms 6848 KiB
01_random_17.txt AC 146 ms 8036 KiB
01_random_18.txt AC 140 ms 8056 KiB
01_random_19.txt AC 139 ms 8112 KiB
01_random_20.txt AC 123 ms 8100 KiB
01_random_21.txt AC 113 ms 8228 KiB
01_random_22.txt AC 103 ms 8220 KiB
01_random_23.txt AC 95 ms 8460 KiB
01_random_24.txt AC 74 ms 8376 KiB
01_random_25.txt AC 90 ms 10016 KiB
01_random_26.txt AC 81 ms 9392 KiB
01_random_27.txt AC 19 ms 4436 KiB
01_random_28.txt AC 16 ms 4364 KiB
01_random_29.txt AC 42 ms 5904 KiB
01_random_30.txt AC 61 ms 6768 KiB
01_random_31.txt AC 89 ms 8624 KiB
01_random_32.txt AC 84 ms 8664 KiB
01_random_33.txt AC 72 ms 11084 KiB
01_random_34.txt AC 74 ms 11712 KiB
01_random_35.txt AC 89 ms 9976 KiB
01_random_36.txt AC 90 ms 10352 KiB
01_random_37.txt AC 89 ms 9312 KiB
01_random_38.txt AC 91 ms 10804 KiB
01_random_39.txt AC 91 ms 10216 KiB
01_random_40.txt AC 92 ms 10460 KiB
01_random_41.txt AC 91 ms 12024 KiB
01_random_42.txt AC 92 ms 12300 KiB
01_random_43.txt AC 93 ms 12400 KiB
01_random_44.txt AC 146 ms 8140 KiB
01_random_45.txt AC 140 ms 8128 KiB
01_random_46.txt AC 138 ms 8196 KiB
01_random_47.txt AC 125 ms 8048 KiB
01_random_48.txt AC 110 ms 8288 KiB
01_random_49.txt AC 105 ms 8376 KiB
01_random_50.txt AC 100 ms 8628 KiB
01_random_51.txt AC 85 ms 8908 KiB
01_random_52.txt AC 53 ms 8200 KiB
01_random_53.txt AC 88 ms 10060 KiB
01_random_54.txt AC 19 ms 4724 KiB
01_random_55.txt AC 36 ms 5464 KiB
01_random_56.txt AC 60 ms 6636 KiB
01_random_57.txt AC 78 ms 8200 KiB
01_random_58.txt AC 87 ms 9156 KiB
01_random_59.txt AC 3 ms 3732 KiB
01_random_60.txt AC 128 ms 8204 KiB
01_random_61.txt AC 120 ms 8044 KiB
01_random_62.txt AC 121 ms 8132 KiB
01_random_63.txt AC 108 ms 8152 KiB
01_random_64.txt AC 101 ms 8168 KiB
01_random_65.txt AC 86 ms 8072 KiB
01_random_66.txt AC 86 ms 8168 KiB
01_random_67.txt AC 79 ms 9148 KiB
01_random_68.txt AC 64 ms 9124 KiB
01_random_69.txt AC 57 ms 10544 KiB
01_random_70.txt AC 147 ms 8128 KiB
01_random_71.txt AC 131 ms 8204 KiB
01_random_72.txt AC 146 ms 8052 KiB
01_random_73.txt AC 127 ms 8128 KiB
01_random_74.txt AC 128 ms 8120 KiB
01_random_75.txt AC 146 ms 8124 KiB
01_random_76.txt AC 130 ms 8124 KiB
01_random_77.txt AC 148 ms 8064 KiB
01_random_78.txt AC 128 ms 8196 KiB
01_random_79.txt AC 127 ms 8076 KiB
02_small_80.txt AC 1 ms 3748 KiB
02_small_81.txt AC 1 ms 3612 KiB
02_small_82.txt AC 1 ms 3552 KiB
02_small_83.txt AC 1 ms 3616 KiB
02_small_84.txt AC 1 ms 3516 KiB
02_small_85.txt AC 1 ms 3744 KiB
02_small_86.txt AC 1 ms 3600 KiB
02_small_87.txt AC 1 ms 3508 KiB
02_small_88.txt AC 1 ms 3600 KiB
02_small_89.txt AC 1 ms 3548 KiB
02_small_90.txt AC 1 ms 3560 KiB