本記事は管理人が競技プログラミングを始めたため,その精進日記としてログを取ったものです。アウトプットして積極的にモチベーションを上げていく作戦です。まずはc++を習得するところから始めます。その他の記事は以下をご覧ください。
【競プロ精進日記】目次まとめ
ABC
Atcoder Beginner Contestの過去問を解いています。最低限のコメントと一言が添えられています。
...
スポンサーリンク
数値型
C++入門 AtCoder Programming Guide for beginners (APG4b)を1からさらっていく内容です。
#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;
int main() {
int N = 0;
cin >> N;
long long l0 = 2;
long long l1 = 1;
rep(i, N-1){
l1 = l1 + l0;
l0 = l1 - l0;
}
cout << l1 << endl;
}
フィボナッチ数列のような再帰の問題でした。結果を格納する数値型をintにしておくと「2*10^9」までしか表せられないため,今回の問題のように「10^18」まで扱いたい場合にはlong long(64bit整数型)を利用する必要があります。
また,今回の実装では再帰関数を用いずに同じ変数を使い回すようなアイディアを利用しました。(再帰関数は頭がこんがらがるので)