[Buổi 24][Lớp & đối tượng][ADV] Bài 1: Bảng điểm đội với chuỗi trận


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

Bảng điểm đội với chuỗi trận

Bối cảnh

Một giải đấu có n đội. Mỗi Team object giữ name và chuỗi kết quả gồm các ký tự W,D,L. Object phải tự tính: points (W=3,D=1), wins, goal-like streak ở đây là chuỗi W liên tiếp dài nhất. Bảng xếp hạng ưu tiên points giảm, wins giảm, longestWinStreak giảm, name tăng.

Bài Advanced nâng class từ "một vài getter" thành object có nhiều thống kê derived trên cùng chuỗi state. Comparator không nên tự scan chuỗi nhiều cách khác nhau; mỗi behavior phải có contract rõ. Với n và độ dài chuỗi lớn vừa phải, gọi method trong comparator vẫn đủ, nhưng lời giải tốt có thể cache qua method nếu muốn trong phạm vi class cơ bản.

Mục tiêu quan trọng của bài là giữ công thức/behavior bên trong class thay vì để main tự tính lại ở nhiều nơi. Mỗi object phải có state riêng và method đọc đúng state đó. Khi behavior được gọi nhiều lần hoặc dùng trong ranking, một nguồn logic duy nhất giúp tránh hai công thức gần giống nhưng cho kết quả khác nhau.

Mục tiêu quan trọng của bài là giữ công thức/behavior bên trong class thay vì để main tự tính lại ở nhiều nơi. Mỗi object phải có state riêng và method đọc đúng state đó. Khi behavior được gọi nhiều lần hoặc dùng trong ranking, một nguồn logic duy nhất giúp tránh hai công thức gần giống nhưng cho kết quả khác nhau.

Yêu cầu

  1. Class Team có name, results.
  2. Methods points(), wins(), longestWinStreak().
  3. Sort theo 4 tiêu chí.
  4. In rank name points wins streak.

Input

Dòng 1 n; n dòng name results (results token, có thể - nghĩa là chưa đấu).

Output

n dòng ranking.

Ràng buộc

1≤n≤5000, tổng độ dài results≤2e5.

Ví dụ 1

Input

4
A WWD
B WWW
C WDLW
D -

Output

1 B 9 3 3
2 A 7 2 2
3 C 7 2 1
4 D 0 0 0

Giải thích

A có points7,wins2,streak2. B có9,3,3 nên đứng đầu. C có7,wins2 nhưng streak1, nên sau A vì A/C cùng points/wins nhưng A streak2 lớn hơn. D chưa đấu có0. Ranking B,A,C,D.

Trường hợp mẫu cũng cho thấy kết quả được lấy thông qua behavior của object, không phải do main tự thay đổi field rồi tính tạm. Mỗi object giữ state độc lập, nên các phép tính ở object này không làm thay đổi object khác và output phản ánh đúng state đã nhập.

Ví dụ 2

Input

3
X DDD
Y WLL
Z LWL

Output

1 Y 3 1 1
2 Z 3 1 1
3 X 3 0 0

Giải thích

X: DDD=3 points,0 wins,streak0. Y: WLL=3 points,1 win,streak1. Z: LWL cũng3 points,1 win,streak1; tie name Y<Z. Vì vậy Y,Z,X.

Trường hợp mẫu cũng cho thấy kết quả được lấy thông qua behavior của object, không phải do main tự thay đổi field rồi tính tạm. Mỗi object giữ state độc lập, nên các phép tính ở object này không làm thay đổi object khác và output phản ánh đúng state đã nhập.

Thông tin học tập

  • Module: M07
  • Buổi: B24
  • Loại bài: ADVANCED
  • Độ khó: Hard
  • Concepts: class, vector, methods, sorting, longest streak, multi-level ranking
  • Giới hạn kiến thức: B01-B24
  • Time limit: 2 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo