[Buổi 21][Xử lý chuỗi][HW] Bài 1: Từ khóa nổi bật trong log


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Từ khóa nổi bật trong log

Bối cảnh

Một hệ thống log nhận một dòng văn bản gồm nhiều token tách bởi whitespace. Trước khi thống kê, mọi token phải được chuyển về lowercase. Nhiệm vụ là tìm "từ khóa nổi bật" theo ba tiêu chí: tần suất lớn nhất; nếu hòa, token xuất hiện lần đầu sớm hơn; nếu vẫn hòa, token có thứ tự từ điển nhỏ hơn.

Bài không chỉ đếm frequency mà còn yêu cầu lưu first position. map<string,int> có thể giữ tần suất, còn một map khác lưu index xuất hiện đầu tiên. Sau khi tokenization xong, duyệt toàn bộ key để chọn best. Điểm Medium nằm ở tie-break: thứ tự key của map không tương đương thứ tự xuất hiện trong dòng. Pipeline đúng phải là đọc → tokenize → normalize → aggregate → select.

Để phân biệt đúng tie-break, hãy thử dữ liệu mà ba từ có cùng frequency nhưng xuất hiện lần đầu ở các vị trí khác nhau. Nếu code chỉ duyệt map rồi chọn key nhỏ nhất, kết quả sẽ sai. Việc lưu first[word] ngay ở lần gặp đầu vừa rẻ vừa làm rule lựa chọn minh bạch.

Yêu cầu

  1. Đọc một dòng.
  2. Tokenize theo whitespace bằng stringstream.
  3. Lowercase từng token.
  4. Tìm token theo frequency giảm → first index tăng → lexicographic tăng.
  5. In word frequency firstIndex; nếu không có token in EMPTY.

Input

Một dòng văn bản.

Output

EMPTY hoặc một dòng word frequency firstIndex.

Ràng buộc

|line|≤5000.

Ví dụ 1

Input

Dev dev Cpp DEV

Output

dev 3 0

Giải thích

Sau lowercase, dãy token là dev dev cpp dev. Frequency: dev=3, cpp=1; first index của dev là 0. Vì frequency 3 lớn nhất tuyệt đối, từ khóa nổi bật là dev, output dev 3 0.

Ví dụ 2

Input

a b c a b c

Output

a 2 0

Giải thích

Ba token a,b,c đều xuất hiện hai lần. Frequency hòa nên xét first index: a lần đầu ở 0, b ở 1, c ở 2. Vì a xuất hiện sớm nhất, output a 2 0 dù map cũng duyệt lexicographic.

Thông tin học tập

  • Module: M06
  • Buổi: B21
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: stringstream, lowercase normalization, map frequency, first occurrence, tie-break
  • Giới hạn kiến thức: B01-B21
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo