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

Cắt, Dán và Độ dài

Đề bài

Mô tả

Ta có một xâu s chỉ gồm các chữ số 1, 2, 3. Độ dài của s ký hiệu là |s|, và ký tự thứ i (tính từ 1) ký hiệu là si.

Có một con trỏ với vị trí {0,1,,|s|}: khi =0 con trỏ đứng trước ký tự đầu tiên, khi =|s| con trỏ đứng sau ký tự cuối cùng, còn khi 0<<|s| con trỏ nằm giữa ss+1. Gọi strái là phần xâu bên trái con trỏ và sphải là phần xâu bên phải con trỏ.

Ta còn có một bộ nhớ đệm c, ban đầu rỗng. Có ba thao tác:

  • Di chuyển: dịch con trỏ sang phải một bước, tức tăng lên 1.
  • Cắt: gán csphải, rồi gán sstrái.
  • Dán: nối thêm giá trị của c vào cuối xâu s (thao tác này không làm thay đổi c).

Con trỏ bắt đầu tại =0. Sau đó ta lặp lại quy trình sau:

  1. Thực hiện thao tác Di chuyển một lần.
  2. Thực hiện thao tác Cắt một lần.
  3. Thực hiện thao tác Dán đúng s lần.
  4. Nếu =x thì dừng; ngược lại quay về bước 1.

Cho xâu ban đầu s và số nguyên x, hãy tìm độ dài của s khi quy trình dừng lại. Vì giá trị này có thể rất lớn, chỉ cần in ra phần dư khi chia cho 109+7.

Dữ liệu đảm bảo rằng tại mọi thời điểm luôn có |s|.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t: số lượng bộ dữ liệu.
  • Với mỗi bộ dữ liệu:
    • Dòng thứ nhất chứa số nguyên x.
    • Dòng thứ hai chứa xâu ban đầu s (chỉ gồm các chữ số 1, 2, 3).

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra một dòng chứa độ dài của s khi quy trình dừng, lấy phần dư khi chia cho 109+7.

Ràng buộc

  • 1t1000
  • 1x106
  • 1|s|500
  • Tổng của x trên toàn bộ tệp không vượt quá 106.

Ví dụ

Input Output Giải thích
4
5
231
7
2323
6
333
24
133321333
25
1438
1101
686531475
Với s=231, x=5: sau bước 1 (=1, s1=2) xâu thành 23131; sau bước 2 (=2, s2=3) thành 23131131131; các bước sau =3,4,5 cho độ dài cuối cùng là 25.
3
1
2
1
3
2
21
1
1
3
Hai bộ đầu có x=1: chỉ một vòng lặp, độ dài không đổi (=1). Bộ thứ ba x=2, s=21: sau vòng =1 (s1=2) xâu thành 211 (dài 3), sau vòng =2 (s2=1) độ dài giữ nguyên 3.

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 1.26.3 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