trang chủ / đề bài / dhbb25_dx45_10_password

Mật khẩu tuần hoàn

Đề bài

Mô tả

Trên không gian mạng, mỗi người dùng đều được đại diện bởi một tài khoản định danh kèm theo một phương thức bảo vệ. Mật khẩu là một công cụ bảo mật phổ biến, được tạo thành bởi một chuỗi các ký tự đặc trưng riêng của chủ nhân tài khoản.

Ngày nay, mật khẩu tỏ ra kém an toàn hơn các công cụ bảo mật mới khác như nhận diện khuôn mặt (Face ID), dấu vân tay (fingerprint) hay xác thực hai lớp (2FA), bởi mật khẩu có thể dễ dàng bị "bẻ khoá" bởi những phương thức tấn công đơn giản như "tấn công brute-force": duyệt tự động tất cả các khả năng của xâu mật khẩu. Phương thức này đặc biệt nguy hiểm nếu mật khẩu có chứa các xâu con tuần hoàn, bởi quy luật tuần hoàn có thể khiến cho mật khẩu trở nên dễ đoán hơn.

Bạn là chủ tài khoản của một hệ thống mạng nội bộ. Để đảm bảo an toàn, bạn cần kiểm tra lại xem mật khẩu hiện tại của tài khoản có tồn tại sự tuần hoàn nào hay không. Biết rằng mật khẩu hiện tại là một xâu S gồm N ký tự Latin thường. Bạn hãy thực hiện Q yêu cầu kiểm tra sự tuần hoàn của các xâu con S[lq:rq] của mật khẩu trên (1≤q≤Q). Xâu con S[l:r] gồm các ký tự từ vị trí l đến vị trí r của S (các vị trí đánh số từ 1).

Lưu ý: Một xâu T gọi là tuần hoàn nếu tồn tại một xâu X≠T sao cho T=X+X+…+X (ghép liền nhau từ hai bản sao của X trở lên).

Ví dụ, xâu T1=ababab là xâu tuần hoàn vì nó được cấu tạo bởi 3 xâu ab ghép liền với nhau. Ngược lại, xâu T2=abcab không phải là xâu tuần hoàn. Xâu chỉ gồm một ký tự cũng không phải là xâu tuần hoàn.

Yêu cầu: Với mỗi truy vấn, xác định xem xâu con tương ứng có phải là xâu tuần hoàn hay không.

Dữ liệu vào

  • Dòng đầu tiên chứa số nguyên dương N mô tả độ dài mật khẩu.
  • Dòng tiếp theo chứa xâu S mô tả mật khẩu gồm N ký tự Latin in thường.
  • Dòng tiếp theo chứa số nguyên dương Q mô tả số yêu cầu kiểm tra.
  • Q dòng tiếp theo, dòng thứ q chứa hai số nguyên dương lq và rq (1≤lq≤rq≤N) mô tả yêu cầu kiểm tra thứ q trên xâu S[lq:rq].

Dữ liệu ra

Gồm Q dòng, dòng thứ q ứng với truy vấn q là YES (nếu xâu con S[lq:rq] tuần hoàn) hoặc NO (nếu xâu con S[lq:rq] không tuần hoàn).

Ràng buộc

  • 1≤N,Q≤105.
  • 1≤lq≤rq≤N.

Subtasks

  • Subtask 1 (20% số điểm): N,Q≤102.
  • Subtask 2 (20% số điểm): N,Q≤103.
  • Subtask 3 (30% số điểm): N,Q≤104.
  • Subtask 4 (30% số điểm): N,Q≤105.

Ví dụ

Input Output Giải thích
14
abacbaabcabccc
5
1 14
1 4
7 12
12 14
7 11
NO
NO
YES
YES
NO
Truy vấn 1: abacbaabcabccc không tuần hoàn. Truy vấn 2: abac không tuần hoàn. Truy vấn 3: abcabc=abc+abc. Truy vấn 4: ccc=c+c+c. Truy vấn 5: abcab không tuần hoàn.
11
abababaaaaa
5
1 6
1 5
7 11
4 4
6 9
YES
NO
YES
NO
NO
Ví dụ bổ sung. Truy vấn 1: ababab=ab+ab+ab. Truy vấn 2: ababa không tuần hoàn (độ dài 5 không chia hết cho 2). Truy vấn 3: aaaaa gồm 5 xâu a. Truy vấn 4: xâu một ký tự b không tuần hoàn. Truy vấn 5: baaa không tuần hoàn.

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0