[Buổi 25][Trie & Chiến lược xử lý xâu][WS] Bài 1: Danh bạ tiền tố trực tuyến
Danh bạ tiền tố trực tuyến
Bối cảnh và bài toán
Một dịch vụ định danh nhận các tên tài khoản theo thời gian. Hệ thống phải thêm tên mới, kiểm tra một tên đã được đăng ký bao nhiêu lần và đếm bao nhiêu tên hiện có bắt đầu bằng một tiền tố cho trước.
Yêu cầu
Xử lý q thao tác: ADD s, COUNT s, PREFIX p. COUNT in số lần chuỗi chính xác đã được thêm; PREFIX in số chuỗi đã thêm có tiền tố p.
Input
- Dòng 1 chứa
q. qdòng tiếp theo, mỗi dòng là một thao tácADD s,COUNT shoặcPREFIX p.
Output
Với mỗi thao tác COUNT hoặc PREFIX, in một số nguyên trên một dòng.
Ràng buộc
1 <= q <= 2 * 10^5- Tổng độ dài các chuỗi trong input không vượt
5 * 10^5. - Chuỗi chỉ gồm chữ cái thường
a..z.
Chấm điểm
| Subtask | Điểm | Điều kiện | Official tests |
|---|---|---|---|
| S1 | 20% | q <= 100; tổng độ dài <= 2000 | 01–04 |
| S2 | 30% | q <= 5000; tổng độ dài <= 5 * 10^4 | 05–10 |
| S3 | 50% | Không có ràng buộc bổ sung | 11–20 |
Ví dụ 1
Input
8
ADD apple
ADD app
ADD apple
PREFIX app
COUNT apple
COUNT appl
PREFIX apple
PREFIX z
Output
3
2
0
2
0
Giải thích. Có ba chuỗi đã thêm bắt đầu bằng app; apple được thêm hai lần.
Ví dụ 2
Input
5
ADD a
ADD ab
PREFIX a
COUNT a
PREFIX ab
Output
2
1
1
Giải thích. a là prefix của cả a và ab, nhưng chính xác chuỗi a chỉ xuất hiện một lần.
Gợi ý
Hãy xác định thông tin nào có thể được duy trì khi quét từng ký tự hoặc khi đi qua từng node prefix, thay vì xử lý lại toàn bộ chuỗi/tập từ sau mỗi thao tác.
Thông tin bài tập
| Thuộc tính | Giá trị |
|---|---|
| Mã bài | DSA-M08-B25-WS01 |
| Buổi | B25 |
| Loại bài | WORKSHOP |
| Mức độ khó | Trung bình (Medium) |
| Thời gian làm bài khuyến nghị | 40 phút |
| Time limit | 2 giây |
| Memory limit | 256 MB |
| Tổng điểm | 100 |
| Chuẩn ngôn ngữ tham chiếu | C++11 trở lên |
Nguồn: FULLHOUSE DEV – Self-generated.
Comments