提出 #50189963


ソースコード 拡げる

#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 answer {0};
std::map<Num, Num> cache;

Num func(Num x) {
    if (x < 2) {
        return 0;
    }

    if (cache.contains(x)) {
        return cache[x];
    }

    const auto val = x + func(x/2) + func((x + 1) / 2);
    cache[x] = val;
    return val;
}

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

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

提出情報

提出日時
問題 C - Divide and Divide
ユーザ zettsut
言語 C++ 20 (gcc 12.2)
得点 300
コード長 1059 Byte
結果 AC
実行時間 1 ms
メモリ 3692 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 300 / 300
結果
AC × 3
AC × 11
セット名 テストケース
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_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 02_corner_00.txt, 02_corner_01.txt, 03_min_00.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3488 KiB
00_sample_01.txt AC 1 ms 3692 KiB
00_sample_02.txt AC 1 ms 3508 KiB
01_random_00.txt AC 1 ms 3508 KiB
01_random_01.txt AC 1 ms 3688 KiB
01_random_02.txt AC 1 ms 3548 KiB
01_random_03.txt AC 1 ms 3548 KiB
01_random_04.txt AC 1 ms 3400 KiB
02_corner_00.txt AC 1 ms 3500 KiB
02_corner_01.txt AC 1 ms 3524 KiB
03_min_00.txt AC 1 ms 3492 KiB