提出 #55609926


ソースコード 拡げる

#include <bits/stdc++.h>
#include <atcoder/modint>
#include <boost/multiprecision/cpp_int.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>>;

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

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

template <typename T=__int128>
Num power(Num base, Num index, Num mod) {
    const Num x = base % mod;
    if (x == 0) {
        return 0;
    }

    if (x == 1) {
        return 1;
    }

    T acc {1};
    T doubled = x;
    auto i = index;

    while(i > 0) {
        if ((i & 1) != 0) {
            acc *= doubled;
            acc %= mod;
        }

        doubled *= doubled;
        doubled %= mod;
        i /= 2;
    }

    return static_cast<Num>(acc);
}

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

    while(t-- > 0) {
        Num n,m,k;
        is >> n >> m >> k;

        if ((k + 1) == m) {
            if (n >= k) {
                os << "0\n";
            } else {
                os << power(2, n, 10) << "\n";
            }
        } else {
            const Num w = m - k;
            if (n >= m) {
                const Num r = (n - (m - 1) + w - 1) / w;
                n -= r * w;
            }
            os << power(2, n, 10) << "\n";
        }
    }
}

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

提出情報

提出日時
問題 B - Simple Math 4
ユーザ zettsut
言語 C++ 20 (gcc 12.2)
得点 400
コード長 2363 Byte
結果 AC
実行時間 331 ms
メモリ 3580 KiB

ジャッジ結果

セット名 Sample All after_contest
得点 / 配点 0 / 0 400 / 400 0 / 0
結果
AC × 1
AC × 9
AC × 1
セット名 テストケース
Sample example_00.txt
All example_00.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
after_contest after_contest_00.txt
ケース名 結果 実行時間 メモリ
after_contest_00.txt AC 331 ms 3416 KiB
example_00.txt AC 1 ms 3512 KiB
test_00.txt AC 310 ms 3508 KiB
test_01.txt AC 309 ms 3512 KiB
test_02.txt AC 310 ms 3464 KiB
test_03.txt AC 168 ms 3476 KiB
test_04.txt AC 169 ms 3580 KiB
test_05.txt AC 167 ms 3508 KiB
test_06.txt AC 263 ms 3536 KiB
test_07.txt AC 264 ms 3412 KiB