Gợi ý từ

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả: huunguyenhuunguyen

Lời giải: Gợi ý từ

Hướng tiếp cận

Sắp xếp từ điển theo thứ tự từ điển, sau đó dùng tìm kiếm nhị phân để xác định từ đầu tiên khớp với tiền tố. Từ thứ K theo thứ tự từ điển chính là phần tử ở vị trí first+K1.

Nhận xét quan trọng

  1. Sau khi sắp xếp từ điển, tất cả các từ bắt đầu bằng tiền tố p tạo thành một đoạn liên tục trong mảng đã sắp xếp.
  2. Từ thứ K khớp với p chính là phần tử ở chỉ số first\_match+K1. Ta chỉ cần kiểm tra xem phần tử đó có thực sự bắt đầu bằng p không.
  3. Cần lưu lại chỉ số gốc (1-based) của mỗi từ trước khi sắp xếp.

Thuật toán

  1. Đọc W từ, lưu kèm chỉ số gốc.
  2. Sắp xếp từ theo thứ tự từ điển.
  3. Với mỗi truy vấn (K,p):
    • Dùng lower_bound tìm vị trí đầu tiên p.
    • Kiểm tra phần tử ở vị trí first+K1 có bắt đầu bằng p không.
    • Nếu có: in ra chỉ số gốc. Nếu không: in ra 1.

Độ phức tạp

  • Thời gian: O(WlogW·L+N·L·logW) với L là độ dài tiền tố tối đa.
  • Bộ nhớ: O(W·Lmax)

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