Advertisement
hoanmalai

K-based Numbers

Nov 5th, 2021
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1.  
  2. Xây dựng 1 số có N chữ số --> từ 1 số có N - 1 chữ số
  3.  
  4. Chỉ đếm những số valid
  5. Thêm 1 chữ số vào --> chữ số cuối cùng của số bị thêm vào
  6. 0: thêm 1, 2, 3, ... K-1
  7. 1: thêm 0, 1, 2, 3, ..., K-1
  8. 2: thêm 0, 1, 2, 3, ..., K-1
  9. 3: thêm 0, 1, 2, 3, ..., K-1
  10. ...
  11. K-1: thêm 0, 1, 2, 3, ..., K-1
  12.  
  13.  
  14. ============================================================
  15. Cách 1:
  16. Gọi, F[i][j] là số lượng số có i chữ số, và chữ số cuối cùng là j
  17. F[1][j] = 1 với j > 0
  18. F[1][0] = 0
  19.  
  20. for i = 2 to N:
  21. f[i][j] = sum(f[i-1][j']) nếu j != 0
  22. f[i][0] = sum(f[i-1][j']) với j' > 0
  23.  
  24. ===========================================================
  25. Cách 2:
  26. endWith0[i] là số lượng số có i chữ số và kết thúc là chữ số 0
  27. endNot0[i] là số lượng số có i chữ số và kết thúc là chữ số != 0
  28.  
  29. read(N, K)
  30. if N == 1:
  31. print(K)
  32. else:
  33. endWith0[1] = 0
  34. endNot0[1] = K-1
  35. for i = 2 to N:
  36. endWith0[i] = endNot0[i-1]
  37. endNot0[i] = (endNot0[i-1] + endWith0[i-1]) * (K-1)
  38. # End với 1, 2, 3, 4, ..., k-1, nói cách khác là K-1 chữ số
  39. print(endWith0[N] + endNot0[N])
  40.  
  41.  
  42. Độ phức tạp: O(N)
  43.  
  44. ============================================================
  45. Example
  46. N = 3, K = 10
  47.  
  48. endWith0[1] = 0
  49. endNot0[1] = 9
  50.  
  51. Step 1: i = 2
  52. endWith0[2] = endNot0[1] = 9
  53. endNot0[2] = (endNot0[1] + endWith0[1]) * 9 = 81 --> 11, 12, 13, 14, 15
  54.  
  55. Step 2: i = 3
  56. endWith0[3] = endNot0[2] = 81 --> 110, 120, 130, 140, ...
  57. endNot0[3] = (endNot0[2] + endWith0[2]) * 9 = (81 + 9) * 9 = 810
  58.  
  59. Answer: endWith0[N] + endNot0[N] --> 81 + 810 = 891
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement