JOI 2012 - Zig-Zag Numbers

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Một số nguyên dương được gọi là số zigzag nếu khi viết số đó trong hệ thập phân, không có chữ số \(0\) ở đầu, rồi đọc các chữ số theo thứ tự từ trái sang phải, các bước tăng và giảm luân phiên nhau. Các bước tăng và giảm đều là nghiêm ngặt.

Ví dụ, \(2947\) là số zigzag vì dãy chữ số \(2 \to 9 \to 4 \to 7\) lần lượt tăng, giảm, rồi tăng. Số \(71946\) cũng là số zigzag vì các bước lần lượt là giảm, tăng, giảm, rồi tăng. Ngược lại, \(123\), \(71446\), \(71442\)\(88\) không phải số zigzag. Mọi số nguyên dương có một chữ số đều được coi là số zigzag.

Yêu cầu

Đếm số zigzag là bội của \(M\) trong đoạn từ \(A\) đến \(B\), kể cả hai đầu mút, rồi lấy phần dư khi chia số lượng đó cho \(10000\).

Dữ liệu vào

Dữ liệu vào gồm \(3\) dòng, mỗi dòng chứa một số nguyên dương. Ba dòng lần lượt chứa \(A\), \(B\)\(M\).

Lưu ý rằng \(A\)\(B\) có thể không nằm trong phạm vi biểu diễn của các kiểu dữ liệu số nguyên thông thường.

Dữ liệu ra

In ra một dòng chứa phần dư khi chia số lượng các số zigzag là bội của \(M\) trong đoạn \([A,B]\) cho \(10000\).

Ràng buộc

  • \(1 \le A \le B \le 10^{500}\).
  • \(1 \le M \le 500\).
  • \(A\), \(B\)\(M\) đều là số nguyên dương.

Ví dụ

Ví dụ 1

Input
100
200
5
Output
13
Giải thích

\(13\) số zigzag là bội của \(5\) trong đoạn từ \(100\) đến \(200\): \(105\), \(120\), \(130\), \(140\), \(150\), \(160\), \(165\), \(170\), \(175\), \(180\), \(185\), \(190\)\(195\).

Ví dụ 2

Input
6
1234567
3
Output
246
Giải thích

\(50246\) số zigzag là bội của \(3\) trong đoạn từ \(6\) đến \(1234567\). Phần dư khi chia số này cho \(10000\)\(246\), nên in ra \(246\).

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: