提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |