Chọn ĐTQG Huế 2026 - Gợi ý lệnh
Xem dạng PDFTrong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài
Trong các môi trường lập trình hiện nay, hệ thống thường hỗ trợ chức năng tự động gợi ý lệnh khi người dùng nhập một số ký tự đầu tiên. Mỗi lệnh có một độ phổ biến, thể hiện mức độ thường xuyên được sử dụng.
Hệ thống quản lý một từ điển gồm các lệnh. Mỗi lệnh là một xâu chỉ gồm các chữ cái Latin thường (a - z) và có độ phổ biến là một số nguyên dương.
Ban đầu, từ điển rỗng. Hệ thống thực hiện lần lượt ~q~ thao tác thuộc một trong hai loại:
~1\ s\ x~: thêm lệnh ~s~ vào từ điển với độ phổ biến ~x~.
~2\ p~: người dùng nhập xâu ~p~, hệ thống cần tìm lệnh phù hợp để gợi ý.
Với một thao tác loại ~2~ có xâu ~p~, hệ thống đưa ra từ gợi ý theo nguyên tắc sau:
Trong số những lệnh đang có trong từ điển mà nhận ~p~ làm tiền tố, hệ thống gợi ý lệnh có độ phổ biến lớn nhất.
Nếu có nhiều lệnh cùng đạt độ phổ biến lớn nhất, hệ thống gợi ý lệnh nhỏ nhất trong số chúng theo thứ tự từ điển.
Nếu không có lệnh nào nhận ~p~ làm tiền tố, trả lời là -1.
Xâu ~p~ được gọi là tiền tố của xâu ~s~ nếu nó là phần đầu của xâu ~s~. Một xâu cũng là tiền tố của chính nó.
Xâu ~a~ được gọi là nhỏ hơn xâu ~b~ theo thứ tự từ điển nếu hoặc tại vị trí đầu tiên hai xâu khác nhau thì ký tự của ~a~ có mã ASCII nhỏ hơn ký tự của ~b~, hoặc ~a~ là tiền tố thực sự của ~b~. Ví dụ: card < cat, app < apple, ~\dots~
Yêu cầu: Với mỗi thao tác loại ~2~, hãy đưa ra lệnh được hệ thống gợi ý hoặc -1 nếu không tồn tại lệnh phù hợp.
Input
Dòng đầu tiên chứa số nguyên ~q~ ~(1 \le q \le 220000)~.
~q~ dòng tiếp theo, mỗi dòng mô tả một thao tác có dạng ~1\ s\ x~ hoặc ~2\ p~ (~1 \le x \le 10^9, 1 \le |s|, |p| \le 200~, trong đó ~|s|, |p|~ lần lượt là độ dài của xâu ~s, p~).
Số thao tác loại ~1~ không vượt quá ~200000~.
Số thao tác loại ~2~ không vượt quá ~20000~ và dữ liệu vào chắc chắn có ít nhất một thao tác loại ~2~.
Mọi xâu trong dữ liệu vào, cả xâu ~s~ của thao tác ~1~ lẫn xâu ~p~ của thao tác ~2~, không rỗng và chỉ gồm các chữ cái Latin thường từ a đến z.
Tổng độ dài của tất cả các xâu xuất hiện trong dữ liệu vào, tính cả xâu của thao tác loại ~1~ lẫn xâu của thao tác loại ~2~, không vượt quá ~500000~.
Các từ khoá được thêm vào bởi các thao tác loại ~1~ đôi một khác nhau và không có thao tác xoá từ khoá khỏi từ điển.
Output
Với mỗi thao tác loại ~2~, theo thứ tự xuất hiện, in ra trên một dòng lệnh được hệ thống gợi ý hoặc -1 nếu tại thời điểm đó không có lệnh nào như vậy.
Scoring
| Subtask | Điểm | Ràng buộc |
|---|---|---|
| 1 | ~20\%~ | ~q \le 100; \lvert s\rvert, \lvert p\rvert \le 20~. |
| 2 | ~20\%~ | Với mọi xâu ~p~ của thao tác loại ~2~ đều có độ dài đúng bằng ~1~. |
| 3 | ~30\%~ | Với tổng độ dài tất cả các xâu không vượt quá ~100000~ và mọi xâu đều có độ dài không vượt quá ~50~. |
| 4 | ~30\%~ | Không có ràng buộc gì thêm. |
Sample Input 1
7
1 cout 10
1 count 25
2 co
1 cin 30
2 ro
1 continue 15
2 con
Sample Output 1
count
-1
continue
Bình luận