Advertisement
Guest User

Numbers of len (n), consecutive digits with difference > |3|

a guest
Jul 2nd, 2016
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. /**
  2.  *  BasselBakr (2016)
  3.  */
  4.  
  5. #include <iostream>
  6. #include <map>
  7. #include <set>
  8. #include <vector>
  9. #include <unordered_set>
  10. #include <algorithm>
  11. #include <cmath>
  12.  
  13. using namespace std;
  14.  
  15. typedef long long ll;
  16. typedef unsigned long long ull;
  17. typedef pair < int, int >pii;
  18.  
  19. #ifndef ONLINE_JUDGE
  20. auto __redirect__ = freopen("in", "r", stdin);
  21. #else
  22. #  include<bits/stdc++.h>
  23. #endif
  24.  
  25. #define ln '\n'
  26. #define del(x) if(x)delete x
  27.  
  28. #define lsb(x) (x&-x)
  29.  
  30. #define rep(i,a,b) for(int i = a; i < b; ++i)
  31. #define repq(i,a,b) for(int i = a; i <= b; ++i)
  32.  
  33. #define per(i,a,b) for(int i = a; i >= b; --i)
  34. #define revn(i,a,b) for(int i = a; i > b; --i)
  35.  
  36. #define repc(i,a,cond) for(int i = a; cond; ++i)
  37. #define revc(i,a,cond) for(int i = a; cond; --i)
  38.  
  39. #define gcd(x,y) __gcd(x,y)
  40. #define lcm(x,y) (x/__gcd(x,y)*y)
  41.  
  42. #define p(x,y) pair<x,y>
  43. typedef p(int, int) pii;
  44. typedef vector < int >vi;
  45. typedef vector < pii > vpii;
  46.  
  47. int const N = 1e6 + 16;
  48. int const M = 1e9 + 7;
  49.  
  50. int digits[][6] = {
  51.   {4, 5, 6, 7, 8, 9},           //0
  52.   {5, 6, 7, 8, 9},              //1
  53.   {6, 7, 8, 9},                 //2
  54.   {7, 8, 9},                    //3
  55.   {0, 8, 9},                    //4
  56.   {0, 1, 9},                    //5
  57.   {0, 1, 2},                    //6
  58.   {0, 1, 2, 3},                 //7
  59.   {0, 1, 2, 3, 4},              //8
  60.   {0, 1, 2, 3, 4, 5},           //9
  61. };
  62.  
  63. int sz[10] = {
  64.   6, 5, 4, 3, 3, 3, 3, 4, 5, 6
  65. };
  66.  
  67. // [length][last_digit]
  68. ll dp[N][10];
  69.  
  70. // n = length
  71. ll f(int n) {
  72.   rep(i, 0, 10) {
  73.     dp[1][i] = 1;
  74.     dp[2][i] = sz[i] - (i >= 4);
  75.   }
  76.  
  77.   repq(i, 3, n)                  // length
  78.     rep(d, 0, 10)               // last digit
  79.       rep(j, 0, sz[d])          // digit before last
  80.         dp[i][d] = (dp[i][d] + dp[i - 1][(digits[d][j])]) % M;
  81.  
  82.   ll cnt = 0;
  83.   rep(i, 0, 10)
  84.     cnt += dp[n][i];
  85.   return cnt % M;
  86. }
  87.  
  88. int main() {
  89.   printf("%lld\n", f(3));
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement