[Buổi 22][Củng cố bộ nhớ & chuỗi][HW] Bài 2: Compact record hợp lệ tại chỗ


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Compact record hợp lệ tại chỗ

Bối cảnh

Một mảng động chứa n record thô dạng name|code. Record hợp lệ nếu có đúng một |, hai field sau trim đều không rỗng. Name được chuẩn hóa khoảng trắng + Title Case; code được trim và uppercase. Sau validation, hệ thống muốn compact tại chỗ: đưa các record hợp lệ lên đầu chính mảng động, giữ nguyên thứ tự tương đối, và coi phần đuôi là không còn sử dụng. Không được cấp phát mảng thứ hai kích thước n.

Đây là bài Medium về kết hợp parsing string với thao tác raw dynamic array. Biến write giữ vị trí ghi record hợp lệ tiếp theo; khi record tại i hợp lệ, canonical string được gán vào a[write++]. Sau vòng lặp, write chính là số valid. Mảng vẫn có capacity n nhưng logical size mới là write — một khái niệm tương tự size/capacity đã gặp ở B19.

Yêu cầu

  1. Cấp phát n string.
  2. Parse/validate name|code.
  3. Canonicalize record hợp lệ.
  4. Compact hợp lệ tại chỗ, stable.
  5. In valid count rồi records; cleanup.

Input

Dòng 1 n; n dòng record.

Output

Dòng đầu valid count; tiếp theo records canonical.

Ràng buộc

0≤n≤2000, mỗi line ≤500.

Ví dụ 1

Input

5
 nGUYEN van a | k62
bad
Le Thi B|tnut01
 |X
Tran C | ab

Output

3
Nguyen Van A|K62
Le Thi B|TNUT01
Tran C|AB

Giải thích

Record1 hợp lệ và canonical Nguyen Van A|K62, được ghi vào a[0]. bad invalid nên bỏ. Record3 thành Le Thi B|TNUT01 và ghi a[1]. |X invalid do name rỗng. Record cuối thành Tran C|AB và ghi a[2]. write=3 nên output ba record theo đúng thứ tự ban đầu.

Ví dụ 2

Input

0

Output

0

Giải thích

n=0 nên raw array không chứa record và vòng parse/compact không chạy. Biến write khởi tạo 0 chính là logical size sau lọc. Chương trình in dòng đầu 0, không có record canonical theo sau, rồi cleanup pointer rỗng an toàn. Đây là case kiểm tra không truy cập a[0] khi batch rỗng.

Thông tin học tập

  • Module: M06
  • Buổi: B22
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: dynamic string array, record validation, in-place compaction, delimiter parse, 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