C++の練習を兼ねて, AtCoder Beginner Contest 153 の 問題D (D – Caracal vs Monster) を解いてみた.
■感想.
1. 解説を見る前にAC版取れたので, 良かったと思う.
2. 引き続き, 過去問を振り返っていきたいと思う.
本家のサイトABC 153解説をご覧下さい.
■C++版プログラム(問題D/AC版).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <bits/stdc++.h> using namespace std; using LL = long long; // 攻撃の回数をカウント. // @param h: モンスター の HP. // @return: 攻撃の回数. LL recursive(LL h){ if(h == 1) return 1; else return 2 * recursive(h / 2) + 1; } int main(){ // 1. 入力情報. LL H; scanf("%lld", &H); // 2. 攻撃の回数は? LL ans = recursive(H); // 3. 出力. printf("%lld\n", ans); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[入力例] 2 [出力例] 3 ※AtCoderテストケースより [入力例] 4 [出力例] 7 ※AtCoderテストケースより [入力例] 1000000000000 [出力例] 1099511627775 ※AtCoderテストケースより [入力例] 9876543210 [出力例] 17179869183 |
■参照サイト
AtCoder Beginner Contest 153