• Source
    1. #include <iostream>
    2. #include <vector>
    3. using namespace std;
    4.  
    5. int arr[15];
    6. int n;
    7. vector <long long> v;
    8. void push47 ()
    9. {
    10. long long s=0;
    11. for (int i=1; i<=n; i++)
    12. {
    13. if (i!=n)
    14. {
    15. s+=arr[i];
    16. s=s*10;
    17. }
    18. else s+=arr[i];
    19. }
    20. v.push_back(s);
    21. }
    22.  
    23. void sinh47 (int u)
    24. {
    25. if (u==n+1)
    26. {
    27. push47 ();
    28. }
    29. else
    30. {
    31. arr[u]=4;
    32. sinh47 (u+1);
    33. arr[u]=7;
    34. sinh47 (u+1);
    35. }
    36. }
    37.  
    38. int BSearch (int front, int back, int x)
    39. {
    40. int VT=-1;
    41. while (front<=back)
    42. {
    43. int mid = (front+back)/2;
    44. if (v[mid]>=x)
    45. {
    46. VT=mid;
    47. back=mid-1;
    48. }
    49. else front=mid+1;
    50. }
    51. return VT;
    52. }
    53.  
    54. int main ()
    55. {
    56. for (int i=1; i<=10; i++)
    57. {
    58. n=i;
    59. sinh47 (1);
    60. }
    61. long long l, r;
    62. cin>>l>>r;
    63. long long v_l = BSearch (0, v.size(), l);
    64. long long v_r = BSearch (0, v.size(), r);
    65. long long LKSUM=0;
    66. if (l==r)
    67. {
    68. LKSUM=v[v_l];
    69. }
    70. else if (v[v_l]==l && v[v_r]==r)
    71. {
    72. LKSUM+=v[v_l];
    73. for (int i=v_l+1; i<=v_r; i++)
    74. {
    75. LKSUM+=((v[i]-v[i-1])*v[i]);
    76. }
    77. }
    78. else if (v[v_l]==l && v[v_r]>r)
    79. {
    80. LKSUM+=v[v_l];
    81. for (int i=v_l+1; i<=v_r-1; i++)
    82. {
    83. LKSUM+=((v[i]-v[i-1])*v[i]);
    84. }
    85. LKSUM+=((r-v[v_r-1])*v[v_r]);
    86. }
    87. else if (v[v_l]>l && v[v_l]<=r && v[v_r]==r)
    88. {
    89. LKSUM+=((v[v_l]-l+1)*v[v_l]);
    90. for (int i=v_l+1; i<=v_r; i++)
    91. {
    92. LKSUM+=((v[i]-v[i-1])*v[i]);
    93. }
    94. }
    95. else if (v[v_l]>l && v[v_l]<=r && v[v_r]>r)
    96. {
    97. LKSUM+=((v[v_l]-l+1)*v[v_l]);
    98. for (int i=v_l+1; i<=v_r-1; i++)
    99. {
    100. LKSUM+=((v[i]-v[i-1])*v[i]);
    101. }
    102. LKSUM+=((r-v[v_r-1])*v[v_r]);
    103. }
    104. else if (v[v_l]>r)
    105. {
    106. LKSUM+=((r-l+1)*v[v_l]);
    107. }
    108. cout<<LKSUM;
    109. return 0;
    110. }