Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- vector< vector< pair <long long, long long> > > dp;
- const long long INF = 1e18;
- pair <long long, long long> operator +(pair <long long, long long> a,pair <long long, long long> b)
- {
- pair <long long, long long> res = {a.first + b.first, a.second + b.second};
- if (res.second >= INF)
- {
- res.second -= INF;
- ++res.first;
- }
- return res;
- }
- void print(pair<long long, long long> res)
- {
- if (res.first == 0)
- cout << res.second;
- else
- {
- string s = "";
- for (int i = 0; i < 18; ++i, res.second /= 10)
- s += char('0' + (res.second % 10));
- reverse(s.begin(), s.end());
- cout << res.first << s;
- }
- }
- int main()
- {
- // freopen("j.in", "r", stdin);
- int n;
- cin >> n;
- dp.resize(n, vector< pair <long long, long long> >(2, {0, 0}));
- dp[0][0] = {0, 1};
- dp[0][1] = {0, 1};
- for (int i = 1; i < n; ++i)
- dp[i][0] = dp[i - 1][0] + dp[i - 1][1], dp[i][1] = dp[i - 1][0];
- pair<long long, long long> res = dp[n - 1][0] + dp[n - 1][1];
- print(res);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment