Editorial for Lần cuối


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Authors: im_mayly, Yuuki

Subtask chung: t \leq 500
Giới hạn:
Có tối đa 500 chuỗi đầu vào.
Hướng tiếp cận

  • Đối với mỗi chuỗi, xử lý từng ký tự theo chiều dài chuỗi để tính số đoạn và kiểm tra mẫu "WB".
  • Độ dài tối đa của mỗi chuỗi ảnh hưởng đến cách tối ưu hóa.

Subtask 1 (05%): chuỗi toàn "W" hoặc "B"
Ta có thể hiểu rắng:

  • Nếu chuỗi toàn "W" hoặc "B", chỉ có 1 đoạn duy nhất, và không có mẫu "WB".
  • Kết quả luôn là cnt = 1 (không cần giảm ok).

Cách xử lý:

  • Kiểm tra nếu toàn bộ ký tự trong chuỗi giống nhau (s[i] = s[0] với mọi i).
  • Nếu đúng, trực tiếp trả về 1.

Độ phức tạp:

\mathcal{O}(|S|) \text{ để kiểm tra chuỗi.}

Subtask 2 (15%): 1 \leq |S| \leq 10
Giới hạn:

  • Chuỗi rất ngắn (dài tối đa 10).
  • Có thể xử lý trực tiếp từng ký tự với độ phức tạp \mathcal{O}(|S|).

Hướng giải:

  • Với mỗi chuỗi:
  • Duyệt qua tất cả các cặp ký tự liên tiếp để đếm số đoạn (cnt).
  • Kiểm tra mẫu "WB" xuất hiện hay không.
  • Tính kết quả: cnt - ok.

Độ phức tạp:

  • Với t \leq 500, tổng độ phức tạp là \mathcal{O}(t \cdot |S|) = \mathcal{O}(500 \cdot 10) = \mathcal{O}(5000).

Subtask 3 (30%): 1 \leq |S| \leq 100
Giới hạn:

  • Độ dài chuỗi lên đến 100.
  • Số lượng chuỗi t \leq 500.

Hướng giải:

  • Giống subtask 2 nhưng cần tối ưu hơn:

1.Chỉ duyệt qua mỗi ký tự s[i] một lần để:

  • Đếm số đoạn khi s[i] \neq s[i-1]. \item Kiểm tra mẫu "WB" khi s[i] = 'W's[i+1] = 'B'.
  • Tính kết quả sau khi duyệt hết chuỗi.

Độ phức tạp:

  • Với mỗi chuỗi dài tối đa 100 ký tự, tổng độ phức tạp là \mathcal{O}(t \cdot |S|) = \mathcal{O}(500 \cdot 100) = \mathcal{O}(50,000).

Subtask 4(50%): 1 \leq |S| \leq 1000

Giới hạn

  • Độ dài chuỗi lên đến 1000.
  • Số lượng chuỗi t \leq 500.

Hướng giải

  • Tương tự subtask 3, nhưng cần đặc biệt lưu ý tối ưu hóa:
  • Duyệt một lần qua chuỗi:
  • Đếm số đoạn bằng cách so sánh s[i]s[i-1].
  • Kiểm tra mẫu "WB" khi s[i] = 'W's[i+1] = 'B'.
  • Không lưu trữ trạng thái thừa thãi, xử lý trực tiếp trên dữ liệu đầu vào.

Độ phức tạp:

\mathcal{O}(t \cdot |S|)


Comments

There are no comments at the moment.