Submission #62988170


Source Code Expand

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

    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, k;
    is >> n >> k;

    std::map<Num,Num> counts;
    for(Num i{0}; i<n; ++i) {
        Num a;
        is >> a;
        a %= k;
        counts[a] += 1;
        counts[a + k] += 1;
    }

    if (counts.size() <= 2) {
        os << "0\n";
        return;
    }

    std::vector<std::pair<Num,Num>> ls;
    for(const auto& [v, cnt] : counts) {
        ls.push_back(std::make_pair(cnt, v));
    }
    std::ranges::sort(ls);

    const auto max_count = ls.back().first;
    Set ssmax;
    for(const auto& [cnt, v] : ls) {
        if (cnt == max_count) {
            ssmax.insert(v);
            ssmax.insert(v + k);
        }
    }

    Num dist {0};
    Num current = *ssmax.begin();
    for(const auto& v : ssmax) {
        if (v >= k) {
            break;
        }

        auto it = ssmax.lower_bound(v);
        ++it;
        const auto u = *it;
        const auto d = u - v;

        if ((d > dist) && (d < k)) {
            dist = d;
            current = u % k;
        }
    }

    Num ans {0};
    for(Num i{1}; i<n; ++i) {
        const auto v = current % k;
        auto it = counts.find(v);
        ++it;
        const auto u = it->first;

        counts[v] -= 1;
        counts[v + k] -= 1;
        if (counts[v] == 0) {
            counts.erase(v);
            counts.erase(v + k);
        }

        const auto d = (u + k - v) % k;
        ans += (k - d) % k;
        current = u % k;
    }

    os << ans << "\n";
}

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

Submission Info

Submission Time
Task A - Shuffle and mod K
User zettsut
Language C++ 20 (gcc 12.2)
Score 500
Code Size 2932 Byte
Status AC
Exec Time 280 ms
Memory 36632 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 2
AC × 40
Set Name Test Cases
Sample example_00.txt, example_01.txt
All example_00.txt, example_01.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt
Case Name Status Exec Time Memory
example_00.txt AC 1 ms 3468 KiB
example_01.txt AC 1 ms 3452 KiB
test_00.txt AC 1 ms 3656 KiB
test_01.txt AC 228 ms 33080 KiB
test_02.txt AC 148 ms 22080 KiB
test_03.txt AC 137 ms 21212 KiB
test_04.txt AC 56 ms 3712 KiB
test_05.txt AC 72 ms 3604 KiB
test_06.txt AC 54 ms 3612 KiB
test_07.txt AC 55 ms 3588 KiB
test_08.txt AC 55 ms 3712 KiB
test_09.txt AC 267 ms 36560 KiB
test_10.txt AC 280 ms 36548 KiB
test_11.txt AC 268 ms 36472 KiB
test_12.txt AC 1 ms 3528 KiB
test_13.txt AC 1 ms 3528 KiB
test_14.txt AC 10 ms 3556 KiB
test_15.txt AC 73 ms 13136 KiB
test_16.txt AC 93 ms 16936 KiB
test_17.txt AC 272 ms 36632 KiB
test_18.txt AC 6 ms 3564 KiB
test_19.txt AC 27 ms 3564 KiB
test_20.txt AC 46 ms 3492 KiB
test_21.txt AC 16 ms 3568 KiB
test_22.txt AC 20 ms 3564 KiB
test_23.txt AC 19 ms 3528 KiB
test_24.txt AC 37 ms 3656 KiB
test_25.txt AC 54 ms 3568 KiB
test_26.txt AC 56 ms 3564 KiB
test_27.txt AC 44 ms 3636 KiB
test_28.txt AC 52 ms 3588 KiB
test_29.txt AC 54 ms 3668 KiB
test_30.txt AC 60 ms 3524 KiB
test_31.txt AC 61 ms 3712 KiB
test_32.txt AC 151 ms 17540 KiB
test_33.txt AC 52 ms 8128 KiB
test_34.txt AC 23 ms 6848 KiB
test_35.txt AC 168 ms 18760 KiB
test_36.txt AC 189 ms 19884 KiB
test_37.txt AC 192 ms 20040 KiB