The_Law

Untitled

Jun 19th, 2017
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. vector< vector< pair <long long, long long> > > dp;
  6.  
  7. const long long INF = 1e18;
  8. pair <long long, long long> operator +(pair <long long, long long> a,pair <long long, long long> b)
  9. {
  10.     pair <long long, long long> res = {a.first + b.first, a.second + b.second};
  11.     if (res.second >= INF)
  12.     {
  13.         res.second -= INF;
  14.         ++res.first;
  15.     }
  16.  
  17.     return res;
  18. }
  19.  
  20. void print(pair<long long, long long> res)
  21. {
  22.     if (res.first == 0)
  23.         cout << res.second;
  24.     else
  25.     {
  26.         string s = "";
  27.         for (int i = 0; i < 18; ++i, res.second /= 10)
  28.             s += char('0' + (res.second % 10));
  29.  
  30.         reverse(s.begin(), s.end());
  31.  
  32.         cout << res.first << s;
  33.     }
  34. }
  35.  
  36.  
  37. int main()
  38. {
  39. //    freopen("j.in", "r", stdin);
  40.     int n;
  41.     cin >> n;
  42.  
  43.     dp.resize(n, vector< pair <long long, long long> >(2, {0, 0}));
  44.  
  45.     dp[0][0] = {0, 1};
  46.     dp[0][1] = {0, 1};
  47.  
  48.     for (int i = 1; i < n; ++i)
  49.         dp[i][0] = dp[i - 1][0] + dp[i - 1][1], dp[i][1] = dp[i - 1][0];
  50.  
  51.     pair<long long, long long> res = dp[n - 1][0] + dp[n - 1][1];
  52.  
  53.     print(res);
  54.  
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment