trang chủ / bài tập / digitseq

Dãy Chữ Số Ghép Khối

Đề bài

Mô tả

Xét một dãy vô hạn được tạo bằng cách ghép liên tiếp các "khối". Khối thứ i là chuỗi thu được khi viết liền nhau tất cả các số nguyên dương từ 1 đến i. Cụ thể:

  • Khối thứ nhất: viết các số từ 1 đến 1, tức là "1".
  • Khối thứ hai: viết các số từ 1 đến 2, tức là "12".
  • Khối thứ ba: viết các số từ 1 đến 3, tức là "123".
  • Khối thứ i: viết các số từ 1 đến i.

Ghép tất cả các khối lại theo thứ tự, ta được dãy chữ số vô hạn:

“112123123412345…”

56 chữ số đầu tiên của dãy là:

“11212312341234512345612345671234567812345678912345678910”

Các phần tử của dãy được đánh số bắt đầu từ 1. Ví dụ, phần tử thứ 1 là chữ số 1, phần tử thứ 32, phần tử thứ 205, phần tử thứ 382, và phần tử thứ 560.

Bạn cần trả lời q truy vấn độc lập. Trong truy vấn thứ i, cho một số nguyên ki; hãy xác định chữ số nằm ở vị trí thứ ki của dãy.

Dữ liệu vào

  • Dòng đầu chứa một số nguyên q — số lượng truy vấn.
  • Mỗi dòng trong q dòng tiếp theo chứa một số nguyên ki — mô tả truy vấn tương ứng.

Dữ liệu ra

In ra q dòng. Dòng thứ i chứa một chữ số xi (0xi9) là phần tử ở vị trí thứ ki của dãy.

Ràng buộc

  • 1q500
  • 1ki1018

Ví dụ

Input Output Giải thích
5
1
3
20
38
56
1
2
5
2
0
Các vị trí được lấy từ dãy mẫu ở đề bài. Vị trí 56 rơi vào phần "…910" của khối thứ 10, cho chữ số 0.
4
2132
506
999999999
1000000000
8
2
9
8
Bốn truy vấn với các vị trí lớn. Cần tính nhanh mà không dựng dãy tường minh.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 GO groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0