fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
  4. #define Bit(mask , i) ((mask >> i) & 1)
  5. #define fi first
  6. #define se second
  7. #define _LOG2(nl) 31 - __builtin_clz(nl)
  8. #define c_bit(nl) __builtin_popcount(nl)
  9. #define ii pair<int , pair<int , int>>
  10. #define lii pair<long long , pair<int , int>>
  11. #define li pair<long long , int>
  12. #define db double
  13. #define onBit(mask , i) (mask | (1 << i))
  14. #define offBit(mask , i) (mask & (~(1 << i)))
  15.  
  16. long long n;
  17. long long f[12][3][3][3];
  18.  
  19. void inp(){
  20. cin >> n;
  21. }
  22.  
  23. long long dp(int pos , int lower , int parity , int find_st , string &x){
  24. if (pos == x.size()){
  25. return find_st;
  26. }
  27.  
  28. if (f[pos][lower][parity][find_st] != -1) return f[pos][lower][parity][find_st];
  29.  
  30. int fin = 9;
  31. if (lower) fin = x[pos] - '0';
  32. long long res = 0;
  33. for (int i = 0 ; i <= fin ; ++i){
  34. int j = i % 2;
  35. if (find_st){
  36. if (!(j ^ parity))continue;
  37. }
  38. int n_lower = 0;
  39. if (lower == 1 && i == fin) n_lower = 1;
  40. int n_find_st = 1;
  41. if (!find_st && i == 0) n_find_st = 0;
  42. res += dp(pos + 1 , n_lower , j , n_find_st , x);
  43. }
  44. return f[pos][lower][parity][find_st] = res;
  45. }
  46.  
  47. void solve(){
  48. string s = to_string(n);
  49. memset(f , -1 , sizeof f);
  50. cout << dp(0 , 1 , 0 , 0 , s);
  51. }
  52.  
  53. int main(){
  54. if (fopen("cau3.inp" , "r")){
  55. freopen("cau3.inp" , "r" , stdin);
  56. freopen("cau3.out" , "w" , stdout);
  57. }
  58. faster;
  59. inp();
  60. solve();
  61. return 0;
  62. }
  63.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Standard output is empty