[Buổi 22][Củng cố bộ nhớ & chuỗi][HW] Bài 1: Batch tên động có thống kê


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Batch tên động có thống kê

Bối cảnh

Một batch tên có số lượng n chỉ biết khi runtime. Chương trình phải cấp phát string* names = new string[n], đọc n dòng bằng getline, chuẩn hóa khoảng trắng và Title Case từng tên. Dòng sau normalize rỗng được xem là invalid nhưng vẫn nằm trong mảng để giữ correspondence với input.

Sau xử lý, hệ thống cần in từng tên hợp lệ theo thứ tự ban đầu, rồi thống kê VALID x INVALID y LONGEST index length, trong đó LONGEST chọn tên hợp lệ có độ dài lớn nhất; tie chọn index nhỏ hơn. Nếu không có tên hợp lệ, index=-1 length=0. Bài Medium kết hợp input line, string normalization và lifetime raw array: vùng nhớ phải tồn tại đến sau khi thống kê/in, rồi mới delete[].

Dòng rỗng sau normalize vẫn cần được giữ tại đúng index vì chỉ số LONGEST và correspondence với input phụ thuộc vị trí gốc. Vì vậy không nên compact ngay ở bài này. Hãy phân biệt "storage size n" với "số tên valid" và chỉ dùng bộ đếm valid/invalid để thống kê, không thay đổi index của các tên hợp lệ.

Yêu cầu

  1. Đọc n dòng vào dynamic string array.
  2. Normalize spaces + Title Case.
  3. In các tên hợp lệ theo thứ tự.
  4. Thống kê valid/invalid và longest.
  5. Cleanup đúng.

Input

Dòng 1 n; tiếp theo n dòng.

Output

Các tên hợp lệ, rồi dòng thống kê.

Ràng buộc

0≤n≤2000, mỗi dòng ≤500 ký tự.

Ví dụ 1

Input

4
 nGUYEN  van an
Le THI B

Tran c

Output

Nguyen Van An
Le Thi B
Tran C
VALID 3 INVALID 1 LONGEST 0 13

Giải thích

Bốn dòng sau normalize là Nguyen Van An, Le Thi B, rỗng, Tran C. Ba tên hợp lệ được in; valid=3, invalid=1. Độ dài lớn nhất thuộc Nguyen Van An ở index0, nên dòng cuối có LONGEST 0 13.

Ví dụ 2

Input

0

Output

VALID 0 INVALID 0 LONGEST -1 0

Giải thích

n=0 nên không cấp phát phần tử và không đọc dòng tên. Không có output tên; valid/invalid đều 0, không có longest nên index=-1 length=0. Kết quả chỉ là VALID 0 INVALID 0 LONGEST -1 0.

Thông tin học tập

  • Module: M06
  • Buổi: B22
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: dynamic string array, getline, normalization, longest line, empty count, lifetime
  • Giới hạn kiến thức: B01-B22
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo