CHIA HẾT

http://lightoj.com/volume_showproblem.php?problem=1068

https://toph.co/p/m-beautiful-numbers

Một số nguyên chia hết cho 3 thì tổng các chữ số của nó cũng chia hết cho 3. Ví dụ: \(3702\ \vdots 3\)\(3 + 7 + 0 + 2\ = \ 12\ \vdots \ 3\). Tính chất này cũng đúng đối với số 9.

Trong bài toán này, chúng ta sẽ dùng tính chất đó cho các số nguyên khác.

Dữ liệu vào:

Ba số nguyên dương \(a,b\)\(k\) \((1\ \leq \ a\ \leq \ b\ < \ 2^{31};0 < k\ < 10000)\).

Kết quả:

Số lượng số nguyên trong phạm vi từ \(a\) đến \(b\) mà chia hết cho \(k\), đồng thời tổng các chữ số của nó cũng chia hết cho \(k\).

Ví dụ:

Input

Output

Input

Output

1 20 2 5 1 1000 4 64

Solution

Phân tích tham số:

Khi sinh đến chữ số \(i\), ta cần biết tổng các chữ số của nó và số dư của phần số đã sinh rồi khi chia cho \(k\). Như vậy, ta cần thêm 2 tham số:

  • \(sum\): là tổng các chữ số đã sinh được. \((sum\ \leq \ 90)\)

  • \(sodu\): là số dư của phần số đã sinh được chia cho \(k\).

Hàm đệ quy \(thu(i,\ gh,\ sum,\ sodu)\) với mảng lưu \(F\lbrack i\rbrack\lbrack sum\rbrack\lbrack sodu\rbrack\).

  • Nếu \(i < 0\) thì

    • Nếu \(sum\ mod\ K\ = 0\)\(sodu = 0\) thì trả về 1;

    • Ngược lại, trả về 0

  • Nếu \(gh = false\)\(F\lbrack i\rbrack\lbrack sum\rbrack\lbrack sodu\rbrack\ \geq \ 0\) thì trả về \(F\lbrack i\rbrack\lbrack sum\rbrack\lbrack sodu\rbrack\)

  • \(kq = 0;\)

  • \(maxc\ = \ (gh\ = \ = true\ ?\ a\lbrack i\rbrack\ :\ 9)\)

  • Với mỗi \(c\) chạy từ 0 đến \(maxc\):

    • \(ghm\ = \ (gh = = true)\ AND\ (c = = maxc)\)

    • \(kq\ = \ kq\ + \ thu(i - 1,\ ghm\ ,\ sum + c,\ (10*sodu + c)\ mod\ K);\)

  • Nếu \(gh = false\) thì gán \(F\lbrack i\rbrack\lbrack sum\rbrack\lbrack sodu\rbrack = kq\)

  • Trả về kq;

Hàm G(x)

  • Tách các chữ số của x;

  • Trả về thu(n-1, true, 0,0);

Độ phức tạp: số trạng thái tối đa là 10 * 2 * 90 * K.

Bạn cần đăng nhập để nộp bài

hpcode.edu.vn
Code tích cực
Trong 24h
  1. nkhoinguyen (13/20)
  2. ngokhang (12/26)
  3. ai_bt_he_he (10/13)
Trong 7 ngày
  1. ngokhang (40/83)
  2. khieuquan (35/59)
  3. npk1605 (30/39)
Trong 30 ngày
  1. quechi (100/125)
  2. dangphong3108 (88/138)
  3. kiennhientv (79/179)
Thống kê
AC/Sub: 97887/180710
Pascal: 17121
C++: 130348
Python: 33199
Lượt xem/tải tests: 38928

Lưu Hải Phong - 2020
[email protected]